当前位置:   article > 正文

Harmony OS 父子组件传参_鸿蒙 组件传参

鸿蒙 组件传参

Harmony OS 父子组件传参案例

一、@Prop:从父组件单向同步状态

类似于vue的prop传参,只能父组件传参给子组件

当点击父组件的按钮时,改变message值,参数跟着更新。并且子组件也跟着更新(前提是要子组件加上@prop装饰器并且参数名称一致)。

当点击子组件按钮想要改变message时,父组件的message改变不了,只能改变子组件的参数

父组件代码:

  1. import propTest from "../view/propTest"
  2. @Entry
  3. @Component
  4. struct UseProp {
  5. @State message: string = '父组件prop'
  6. build() {
  7. Column() {
  8. Text(this.message)
  9. .fontSize(22)
  10. .fontWeight(FontWeight.Bold)
  11. propTest({
  12. message:this.message
  13. })
  14. Button('父组件按钮--变').onClick((event: ClickEvent) => {
  15. this.message="父组件事件触发-变"
  16. })
  17. }
  18. .width('100%')
  19. }
  20. }

子组件代码:

  1. @Component
  2. export default struct propTest {
  3. @Prop message: string ;
  4. build() {
  5. Column() {
  6. Text(this.message)
  7. .fontSize(50)
  8. .fontWeight(FontWeight.Bold)
  9. .fontColor(Color.Green)
  10. Button('子组件按钮').onClick((event: ClickEvent) => {
  11. this.message="子组件变化"
  12. })
  13. .backgroundColor(Color.Green)
  14. }
  15. .width('100%')
  16. }
  17. }

图1.运行时效果图                  图2.点击父组件按钮时                    图3.点击子组件按钮时

二、与父组件双向同步状态:@Link

若是父子组件状态需要相互绑定进行双向同步时,可以使用@Link装饰器。父组件中用于初始化子组件@Link变量的必须是在父组件中定义的状态变量。

当父组件点击按钮时 父子组件的参数同时会+2

当子组件点击按钮时 父子组件的参数同时会-1

这样就实现了数据双向同步(注意传参$clickIndex加$。完成在父子组件中定义状态后,最关键的就是要建立父子组件的双向关联关系。在父组件中使用子组件时,将父组件的clickIndex传递给子组件的clickIndex。其中父组件的clickIndex加上$表示传递的是引用)

  1. import propTest from "../view/propTest"
  2. @Entry
  3. @Component
  4. struct UseProp {
  5. @State message: string = '父组件prop'
  6. @State clickIndex: number = 0
  7. build() {
  8. Column() {
  9. Text('clickIndex:'+this.clickIndex)
  10. .fontSize(40)
  11. .fontWeight(FontWeight.Bold)
  12. .fontColor(Color.Brown)
  13. Button('爸爸+2').onClick((event: ClickEvent) => {
  14. this.clickIndex+=2
  15. })
  16. .backgroundColor(Color.Brown)
  17. propTest({
  18. message:this.message,
  19. clickIndex:$clickIndex
  20. })
  21. }
  22. .width('100%')
  23. }
  24. }

子组件

  1. @Component
  2. export default struct propTest {
  3. @Prop message: string ;
  4. @Link clickIndex:number;
  5. build() {
  6. Column() {
  7. Text('clickIndex:'+this.clickIndex)
  8. .fontSize(40)
  9. .fontWeight(FontWeight.Bold)
  10. .fontColor(Color.Green)
  11. Button('儿子-1').onClick((event: ClickEvent) => {
  12. this.clickIndex-=1
  13. })
  14. .backgroundColor(Color.Green)
  15. }
  16. .width('100%')
  17. }
  18. }

拓展:@watch监听属性

将上述的子组件的clickIndex加上监听器,当clickIndex变化时触发自定义回调函数onClickIndexChanged。函数可以加自己逻辑,比如现在是当clickIndex要小于0时会弹出提示,并且不能为负数。

注意:watch不仅仅是能监听 link修饰符的参数的,@State 、@prop其他的修饰符也能监听

  1. import prompt from '@system.prompt';
  2. @Component
  3. export default struct propTest {
  4. @Prop message: string ;
  5. @Link @Watch('onClickIndexChanged') clickIndex:number;
  6. onClickIndexChanged(){
  7. if(this.clickIndex<0){
  8. prompt.showToast({
  9. message:"数量不能小于0"
  10. })
  11. this.clickIndex=0
  12. }
  13. }
  14. build() {
  15. Column() {
  16. Text('clickIndex:'+this.clickIndex)
  17. .fontSize(40)
  18. .fontWeight(FontWeight.Bold)
  19. .fontColor(Color.Green)
  20. Button('儿子-1').onClick((event: ClickEvent) => {
  21. this.clickIndex-=1
  22. })
  23. .backgroundColor(Color.Green)
  24. }
  25. .width('100%')
  26. }
  27. }

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/Gausst松鼠会/article/detail/330980
推荐阅读
相关标签
  

闽ICP备14008679号