HarmonyOS监听组件参数变化,未变更问题

代码如下:

@Observed 
export class NavigationBarButtonModel { 
  icon?: ResourceStr 
  iconSize?: Length 
  text?: ResourceStr 
  textSize?: Length 
  textColor?: ResourceColor 
  onClick?: (event?: ClickEvent) => void 
  tag?: string 
  constructor() 
  constructor(onClick: (event?: ClickEvent) => void) 
  constructor(onClick: (event?: ClickEvent) => void, icon: ResourceStr) 
  constructor(onClick: (event?: ClickEvent) => void, icon: ResourceStr, iconSize: Length) 
  constructor(onClick?: (event?: ClickEvent) => void, icon?: ResourceStr, iconSize?: Length) { 
    this.onClick = onClick 
    this.icon = icon 
    this.iconSize = iconSize ?? "22vp" 
    this.textSize = "22fp" 
    this.textColor = "#fff000" 
  } 
} 
@Component 
struct NavigationBarButton { 
  @ObjectLink @Watch('onChangeModel') model: NavigationBarButtonModel 
  private clickEvent?: (event?: ClickEvent) => void 
  @Prop text: string 
  build() { 
    Row() { 
      if(this.model.icon) { 
        Image(this.model.icon) 
          .width(this.model.iconSize ?? "22vp") 
          .height(this.model.iconSize ?? "22vp") 
          .objectFit(ImageFit.Contain) 
      }else if(this.model.text) { 
        Text(this.model.text) 
          .fontSize(this.model.textSize ?? "22fp") 
          .fontColor(this.model.textColor ?? "22fp") 
          .titleStyle() 
      } 
    } 
    .width("46vp") 
    .height("46vp") 
    .justifyContent(FlexAlign.Center) 
    .onClick(this.clickEvent ?? (() => {})) 
  } 
  onChangeModel() { 
    if(this.clickEvent !== this.model.onClick) { 
      this.clickEvent = this.model.onClick 
    } 
  } 
  aboutToAppear() { 
    this.clickEvent = this.model.onClick; 
  } 
}
  • 1.
  • 2.
  • 3.
  • 4.
  • 5.
  • 6.
  • 7.
  • 8.
  • 9.
  • 10.
  • 11.
  • 12.
  • 13.
  • 14.
  • 15.
  • 16.
  • 17.
  • 18.
  • 19.
  • 20.
  • 21.
  • 22.
  • 23.
  • 24.
  • 25.
  • 26.
  • 27.
  • 28.
  • 29.
  • 30.
  • 31.
  • 32.
  • 33.
  • 34.
  • 35.
  • 36.
  • 37.
  • 38.
  • 39.
  • 40.
  • 41.
  • 42.
  • 43.
  • 44.
  • 45.
  • 46.
  • 47.
  • 48.
  • 49.
  • 50.
  • 51.
  • 52.
  • 53.
  • 54.

引入组件NavigationBarButton({model: model});

第一次修改构造一个model,修改 icon,onclick,组件渲染,触发aboutToAppear,没触发onChangeModel,点击 button,触发 onclick 事件。

第二次修改 model,只修改model的onClick,并没有触发aboutToAppear,也没触发onChangeModel,点击 button,触发的是 onclick 第一次的事件。

在第二次只修改model的 onClick时, 如何操作,点击button触发的是第二次的 click 事件?为什么不触发onChangeModel事件?

HarmonyOS
2024-08-09 11:30:09
689浏览
收藏 0
回答 1
回答 1
按赞同
/
按时间
FengTianYa

首先aboutToAppear()事件是放在build()事件之前执行的;其次,观察到代码中并没有对this.model这个对象做重新赋值,所以没有触发到onChangeModel事件。demo里面是触发NavigationBarButtonA中的onClick事件,触发NavigationBarButton中的onChangeModel事件。

在NavigationBarButton中onClick事件可做如下更改:

.onClick(this.clickEvent ?? (() => { 
  if (this.clickEvent) { 
    // this.clickEvent; 
    console.log("11111") 
  } 
  else { 
    console.log("22222") 
  } 
}))
  • 1.
  • 2.
  • 3.
  • 4.
  • 5.
  • 6.
  • 7.
  • 8.
  • 9.
分享
微博
QQ
微信
回复
2024-08-09 17:40:00
相关问题
HarmonyOS 位置权限变更监听回调问题
953浏览 • 1回复 待解决
HarmonyOS 如何监听组件自身尺寸变化
759浏览 • 1回复 待解决
HarmonyOS onMemoryLevel监听内存变化
580浏览 • 1回复 待解决
HarmonyOS 网络变化监听失效
784浏览 • 1回复 待解决
HarmonyOS 音频设备变化监听
923浏览 • 1回复 待解决
HarmonyOS 装饰器数据变化监听
581浏览 • 1回复 待解决
HarmonyOS page如何监听数据变化
828浏览 • 1回复 待解决
HarmonyOS Web组件头部参数问题
732浏览 • 1回复 待解决
HarmonyOS 如何监听系统主题变化
885浏览 • 1回复 待解决
HarmonyOS 如何监听某个变量是否变化
731浏览 • 1回复 待解决
鸿蒙如何监听键盘高度变化
335浏览 • 1回复 待解决
如何监听窗口大小的变化
3276浏览 • 1回复 待解决
如何监听window大小的变化
1280浏览 • 1回复 待解决
HarmonyOS 如何监听到音频焦点的变化
835浏览 • 1回复 待解决
HarmonyOS 如何监听折叠屏折叠状态变化
1009浏览 • 1回复 待解决