HarmonyOS鸿蒙Next中请问两个类或一个组件和一个类怎么双向绑定同一个变量?
HarmonyOS鸿蒙Next中请问两个类或一个组件和一个类怎么双向绑定同一个变量? 如题,我知道两个组件之间可以使用@State@Link、@StorageLink等实现。 那么,如果是两个类呢?
目前我能够想到的是AppStorage.get()、AppStroage.setOrCreate()、emitter。不过发现使用起来有延迟。
有没有延迟比较小点的方案呢?
······················································································
跟大家说下目前的开发背景:
1、需要 avPlayer工具、通知栏的播控中心、Silder组件 三者的播放进度保持一致
2、我尝试了AppStorage、emitter,效果不理想:一是滑动不流畅、二是有时候滑过去了但是又弹回去了,所以给人的体验感不好
所以,基于以上问题,希望能获取一个理想的解决方案。如果大家有经验,有想法,欢迎给予意见!
更多关于HarmonyOS鸿蒙Next中请问两个类或一个组件和一个类怎么双向绑定同一个变量?的实战教程也可以访问 https://www.itying.com/category-93-b0.html
更多关于HarmonyOS鸿蒙Next中请问两个类或一个组件和一个类怎么双向绑定同一个变量?的实战系列教程也可以访问 https://www.itying.com/category-93-b0.html
不错不错,我试了一下,确实可以,
各位,我知道什么原因了,进度条之所以不流畅,是因为我这边加的判断只是在拖动结束的时候才跳转,这样有时候会弹回去,不流畅。我参考一个示例,将代码修改了,将判断修改成以下的后就顺畅多了,基本上不会再弹回去:
Slider()组件的onChange()方法中可以加入下列判断
if (mode === SliderChangeMode.End || mode === SliderChangeMode.Begin)
在HarmonyOS Next中,若需实现两个类或一个组件与一个类之间的双向绑定,推荐使用[@Observed](/user/Observed)
和@ObjectLink
装饰器结合的方式,这能有效减少延迟并提升响应性能。以下是具体方案:
-
定义被观察类:使用
[@Observed](/user/Observed)
装饰类,确保其属性变化可被监听。[@Observed](/user/Observed) class ProgressData { currentTime: number = 0; }
-
在组件和类中引用同一实例:通过
@ObjectLink
装饰变量,实现双向绑定。[@Component](/user/Component) struct SliderComponent { @ObjectLink progressData: ProgressData; // 组件内修改progressData.currentTime会同步到类实例 } // 在另一个类或组件中同样绑定该实例 class AVPlayerTool { @ObjectLink progressData: ProgressData; // 类内部修改也会触发同步 }
-
共享数据实例:确保组件和类使用同一个
ProgressData
实例,可通过构造函数或依赖注入传递。
此方案基于ArkUI的响应式机制,直接监听对象属性变化,避免了AppStorage或Emitter的事件派发延迟,能显著提升滑动流畅度和实时性,适合播控进度同步等高频率更新场景。