首页 > 其他分享 >八、后代组件数据双向Provide和Consume

八、后代组件数据双向Provide和Consume

时间:2023-12-14 09:03:23浏览次数:27  
标签:Consume Provide Text testStyle ProvideConsume wechat 组件

祖宗组件向后代组件传递数据并实现数据的双向绑定,即:祖宗组件的数据改变则后代组件的数据也跟着变化,后代组件数据变化则祖宗组件的数据也跟着变化。

这里需要在祖宗中使用@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)
}

 

标签:Consume,Provide,Text,testStyle,ProvideConsume,wechat,组件
From: https://www.cnblogs.com/ckfuture/p/17900403.html

相关文章

  • C++ Qt开发:Slider滑块条组件
    Qt是一个跨平台C++图形界面开发库,利用Qt可以快速开发跨平台窗体应用程序,在Qt中我们可以通过拖拽的方式将不同组件放到指定的位置,实现图形化开发极大的方便了开发效率,本章将重点介绍Slider滑块条组件的常用方法及灵活运用。当涉及到C++Qt开发中的Slider滑块条组件时,你可能会用到......
  • common-fileupload组件实现java文件上传和下载
    简介:文件上传和下载是javaweb中常见的操作,文件上传主要是将文件通过IO流传放到服务器的某一个特定的文件夹下,而文件下载则是与文件上传相反,将文件从服务器的特定的文件夹下的文件通过IO流下载到本地。对于文件上传,浏览器在上传的过程中是将文件以流的形式提交到服务器端的,如果直......
  • 使用element 2.14 实现表格虚拟滚动组件
    下述代码为组件实现代码复制即可食用,默认只展示一屏数据加两条全选存在些许问题,使用row-key时,如果行过多滚动时会不会很流畅特别需要注意的是行高必须要保持一致<template><divclass="t-table":id="TTableId"><el-tableref="el-table":tooltip-......
  • C++ Qt开发:CheckBox多选框组件
    Qt是一个跨平台C++图形界面开发库,利用Qt可以快速开发跨平台窗体应用程序,在Qt中我们可以通过拖拽的方式将不同组件放到指定的位置,实现图形化开发极大的方便了开发效率,本章将重点介绍CheckBox单行输入框组件的常用方法及灵活运用。QCheckBox是Qt中用于实现复选框的组件,它提供了......
  • 安卓之各组件的LayoutParams分析
    文章摘要     在Android开发中,LayoutParams是一个非常重要的概念,它用于描述View在其父容器中的布局行为。不同的ViewGroup有不同的LayoutParams子类,例如LinearLayout.LayoutParams、RelativeLayout.LayoutParams等。本文将分析各组件的LayoutParams获取方式,区别,并附上示......
  • springboot+VUE——mybatis分页和Element Plus的分页组件实践
    分页只有基础的分页功能,跳转和动态选择每页展示多少条数据的功能可以参考ElementPlus的分页组件自行配置并且传入相应的方法即可!<scriptlang="ts"setup>/***分页变量数据*/constpagination=ref({ current_page:1, // 当前页码,此处默认为第一页 total_data:0......
  • RecyclerView组件强化——设置rv最大高度,显示滑动条,跳到最后子view
     意义:RecyclerView基础就LinearLayout排列子view。需要扩展它的最大高度,滑动条,跳到最后子view等1.设置最大高度:recycvlerView设置最大高度需求在:选取不同数据后需要一个Rv来展示所选数据。但布局的高度是有限的,导致rv不能设置自适应来无限增高intmaxH......
  • EditText组件强化
    意义:基础EditText组件和简陋,需要额外设置background:设置背景去除下划线。(@shape/xxxx)inputType:输入类型,文本,密码,数字(text)imeOptions:软键盘确定类型。(actionDone)cursorVisible:能否显示光标(true|false)focusable:能否通过键盘获取焦点(true|false)f......
  • 5分钟搞懂Kubernetes:轻松理解所有组件
    之前我曾经提到了一系列关于服务网格的内容。然而,我意识到有些同学可能对Kubernetes的了解相对较少,更不用说应用服务网格这个概念了。因此,今天我决定带着大家快速理解Kubernetes中的一些专有名词,以便在短时间内入门,并减少学习的时间。我将在接下来的5分钟内为你介绍这些名词,希望你......
  • Android用Dialog作遮照层组件
    1Dialog作蒙版,多层遮罩,布局编写,背景点击,背景样式,,2EditText不可点击,隐藏光标,键盘隐藏,多行显示,3RecyclerView设置最大高度,滚动条显示,4.自定义单选框5.dkVideoPlay6.pdf意义:Android里使用Dialog组件作为遮罩层步骤:1.继承DialogFragment类2.重写onCreate() ......