HarmonyOS 鸿蒙Next共享的数据怎样刷新页面?
HarmonyOS 鸿蒙Next共享的数据怎样刷新页面?
主组件MainWindow共享了一个类list的实例,
let playerListData:Array <playerData>= [];
export {playerListData};
我的自定义组件
import {playerListData} from ‘./MainWindow’; //导入MainWindow的list
@Entry
@CustomDialog
export struct PlayerList {
build() {
…
List({ space: 10 }) {
ForEach(playerListData, (item: playerData) => {
}
但这个playerListData的数据变化的时候,这个CustomDialog页面并没有发生刷新,请问怎样让这个自定义对话框的页面的随着playerListData的数据更新而刷新页面呢?用@Observed好像也用不了传进来的变量,请帮一下忙!谢谢!
3 回复
应该是因为playerListData不是可观测对象,尝试使用[@ObservedV2](/user/ObservedV2)和[@Trace](/user/Trace)装饰器 文档
- 将playerListData移动到一个model里面,例如: class PlayerListViewModel
- 给PlayerListViewModel类添加[@ObservedV2](/user/ObservedV2)装饰器,并给playerListData字段添加[@Trace](/user/Trace)装饰器
- 在MainWindow里面创建PlayerListViewModel类的实例
- 在struct PlayerList中导入MainWindow中的PlayerListViewModel实例
也许可以用~
[@ObservedV2](/user/ObservedV2)
export class PlayerListViewModel {
[@Trace](/user/Trace) playerListData: Array <playerData>= [];
}
export class MainWindows{
model: PlayerListViewModel = new PlayerListViewModel();
}
import {model} from ‘./MainWindow’;
@Entry
@CustomDialog
export struct PlayerList {
build() {
List({ space: 10 }) {
ForEach(model.playerListData, (item: playerData) => {
…
})
}
}
看你这像是数据在页面内进行更新,你想让弹窗里的内容跟着更新? 考虑一下数据更新这些操作放在弹窗自定义struct的生命周期里处理呗