Skip to content
Snippets Groups Projects
yz's avatar
yz authored
9d77d206
History

hw1

设计

实现一个todolist

主页面

导航与tab

  • 展示已有的todo项,点击后跳转到 详情子页面✔️
  • 添加按钮,点击后跳转到 添加子页面✔️
  • 底部tab栏,包含两个页面:左边为本地版(即主页面),右边为网页版✔️
  1. 如何让两个页面的数据同步、共享?—— @State & @Link
  2. 如何传递事项编号给子页面? —— 作为子页面的name传递,在pagemap处解析
详情子页面
  • 展示todolist详情✔️
  • 返回主界面/删除 按钮✔️
添加子页面

http,数据库

  • 通过http请求获取简单的信息:当前时间/天气?然后进行包装处理✔️
  • 添加后把信息存储到数据库✔️
  • 返回/添加 按钮及操作✔️
  1. ⭐如何让添加操作返回后,原页面立即更新? —— pushDestination & onPop(父子都需要配置,且用push + onPop没办法)
  2. 如何存数据库 —— preference,把array转换为json格式存储,再把json转换为array展示(注意内容为空的时候不能转换为json,会报错),在每一次add/delete操作后对数据库进行存储(因为页面重启后没有回调,无法在最后进行存储)
网页版

WebView

  • 另写一个html格式的todolist展示
  • 展示已有的todo项,并且可以标记为已完成(同步)
  • 不进入详情页,不添加
其它

让网页版和本地版的数据同步(也即“已完成”的状态)

-> 让页面观察到isCompleted属性的改变 —— 每次改变这一属性的时候,替换整个对象(⭐否则只改变了对象的成员的值,对象的指针没有变化,页面无法观察到改变)

-> 这一属性是由TodoItem控制的,因此往Item中传入整个对象数组以及index

-> ForEach:

  • 遍历时的参数格式不能有误!必须先写item再写index,否则会把index识别为item

    ForEach(this.totalTasks, (item: TodoItemModel, index: number) => {...}

在交互时,遇到了这样的情况:

ark改变 - web不改变

web改变 - ark改变

原因:web中检测不到数据的变化,这个数据是在web建立的一开始传入的,而且修改也不是通过web,因此无法通过web的监视器来监听,目前只能想到:在arkts中监听,有变化时手动更新web的数据✔️

问题

有bug:可能是因为本地页面的监视不够,只监视了对象数组,没有监视单个对象