八、后代组件数据双向Provide和Consume
祖宗组件向后代组件传递数据并实现数据的双向绑定,即:祖宗组件的数据改变则后代组件的数据也跟着变化,后代组件数据变化则祖宗组件的数据也跟着变化。
这里需要在祖宗中使用@Provide装饰器,后代组件需要使用@Consume装饰器
以下代码说明了两点注意:
1.祖宗组件使用@Provide,孙组件使用@Consume
2. 祖宗组件变量名和后代组件变量名、类型保持一致,后代变量不需要初始化赋值
/** * author:创客未来 * copyright:com.ckFuture.hrb * 逐级调用组件 父->子->孙 * 现在想要从父组件直接传递给孙组件数据应该怎么办呢 * 在父组件使用@Privode(提供的含义),孙组件使用@Consume(订阅的含义),父和孙的变量名称、类型保持一样,孙变量不需要初始值。 */ @Entry @Component struct PrivodeConsume { @Provide wechat: string = '微信公众号' build() { Row() { Column({space:20}) { Text(this.wechat).ProvideConsume_testStyle() .onClick(() => { this.wechat='不多讲故事' }) Divider() // 父掉子 ProvideConsume_son() } .width('100%') } .height('100%') } } //子组件 @Component struct ProvideConsume_son{ build() { Column({space:20}) { Text('子组件的布局内容:').ProvideConsume_testStyle() Divider() // 调用孙组件 PrivateConsume_sun() } } } //孙组件(后代组件) @Component struct PrivateConsume_sun{ @Consume wechat: string build() { Column() { Text('孙:' + this.wechat).ProvideConsume_testStyle() .onClick(() => { this.wechat='HarmonyOS4.0' }) } } } @Extend(Text) function ProvideConsume_testStyle() { .fontSize(30) .fontWeight(FontWeight.Bold) }
如果后代组件中的变量名称和祖宗组件的变量名不保持一致应该怎么办?
可以通过起别名的方式
@Provide('theshy') <------>@Consume('theshy') 别名必须保持一致
/** * author:创客未来 * copyright:com.ckFuture.hrb * 逐级调用组件 父->子->孙 * 现在想要从父组件直接传递给孙组件数据应该怎么办呢 * 在父组件使用@Privode(提供的含义),孙组件使用@Consume(订阅的含义),父和孙的变量名称、类型保持一样,孙变量不需要初始值。 */ @Entry @Component struct PrivodeConsume { @Provide('theshy') wechat: string = '微信公众号' build() { Row() { Column({space:20}) { Text(this.wechat).ProvideConsume_testStyle() .onClick(() => { this.wechat='不多讲故事' }) Divider() // 父掉子 ProvideConsume_son() } .width('100%') } .height('100%') } } //子组件 @Component struct ProvideConsume_son{ build() { Column({space:20}) { Text('子组件的布局内容:').ProvideConsume_testStyle() Divider() // 调用孙组件 PrivateConsume_sun() } } } //孙组件(后代组件) @Component struct PrivateConsume_sun{ @Consume('theshy') study: string build() { Column() { Text('孙:' + this.study).ProvideConsume_testStyle() .onClick(() => { this.study='HarmonyOS4.0' }) } } } @Extend(Text) function ProvideConsume_testStyle() { .fontSize(30) .fontWeight(FontWeight.Bold) }
分类:
HarmonyOS
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 阿里最新开源QwQ-32B,效果媲美deepseek-r1满血版,部署成本又又又降低了!
· 单线程的Redis速度为什么快?
· SQL Server 2025 AI相关能力初探
· AI编程工具终极对决:字节Trae VS Cursor,谁才是开发者新宠?
· 展开说说关于C#中ORM框架的用法!
2021-12-14 大数据分析步骤
2021-12-14 大数据感念