HarmonyOS TabContent与父界面的变量传递

在主界面中的一个变量,传递到子TabContent中,用的@Watch去监听变化,但是一开始只对可见的TabContent生效,其他的不可见的并没有接收到这个变量的变化。

HarmonyOS
2天前
浏览
收藏 0
回答 1
待解决
回答 1
按赞同
/
按时间
Heiang

tabcontent目前不支持预加载,但是@Prop修饰的变脸仍可以接收到传递的参数;因此可以在业务上做出一些兼容,比如在aboutToAppear或onAppear内处理一些初始化的动作,或者可以换用其他组件替代tab实现效果。

这里用swiper替代实现了效果,可以参考一下:

@Entry
@Component
struct SwiperExample {
  private swiperController: SwiperController = new SwiperController()
  private data = [0,1,2,3,4,5,6]
  @State currentIndex: number = 0
  build() {
    Column() {
      Swiper(this.swiperController) {
        ForEach(this.data, (item: string,index) => {
          FreezeChild({ message: this.currentIndex, index: index }).onAppear(()=>{
            console.info("初始化外部组件:",item)
          })
        }, (item: string) => item)
      }
      .layoutWeight(1)
      .cachedCount(2)
      .index($$this.currentIndex)
      .indicator(false)
      .loop(true)
      .duration(300)
      .curve(Curve.Linear)
      Row({ space: 12 }) {
        Text(`当前在第${this.currentIndex+1}页,总计${this.data.length}`)
      }.margin(5)
    }.width('100%')
    .margin({ top: 5 })
  }
}
@Component
struct FreezeChild {
  @Link @Watch("onMessageUpdated") message: number
  private index: number = 0
  onMessageUpdated() {
    console.info(`触发tabcontent内监听回调 ${this.message}, index: ${this.index}`)
  }
  build() {
    Text("内容" + `${this.message}, index: ${this.index}`)
      .fontSize(50)
      .fontWeight(FontWeight.Bold)
  }
}
分享
微博
QQ
微信
回复
2天前
相关问题
HarmonyOS 请问TabContent如何page绑定?
672浏览 • 1回复 待解决
弹窗组件调用组件函数传递
1061浏览 • 1回复 待解决
HarmonyOS 变量的定义使用
463浏览 • 1回复 待解决
组件给子组件传递函数
308浏览 • 1回复 待解决
HarmonyOS 调用打印机界面的demo
33浏览 • 1回复 待解决
HarmonyOS Web如何搜索html界面的内容?
344浏览 • 1回复 待解决
如何实现page界面的预渲染?
318浏览 • 1回复 待解决
子组件事件能否到传递组件
2431浏览 • 1回复 待解决
@State 修饰的变量值改变,界面不刷新
1604浏览 • 1回复 待解决
组件子组件使用@Link双向同步
1058浏览 • 1回复 待解决
自定义弹窗中的变量如何传递给页面
2744浏览 • 1回复 待解决
组件如何孙子组件进行状态同步
2750浏览 • 1回复 待解决