通信

@Prop

1单向数据通信,子组件同步父组件更新 2不能在@Entry中使用 3可以不初始化
单向数据通信,子组件同步父组件更新 不能在@Entry中使用 可以不初始化
 1import { UserModel } from "./UserModel"  2  3@Component  4export struct ChildModel {  5 @Prop user: UserModel  6  7 build() {  8 Column() {  9 Text(`${this.user.id}`) 10 Text(`${this.user.name}`) 11 Button('修改').onClick(() => { 12 this.user.name = '哇哈哈' 13 }) 14 } 15 } 16}
import { UserModel } from "./UserModel" @Component export struct ChildModel { @Prop user: UserModel build() { Column() { Text(`${this.user.id}`) Text(`${this.user.name}`) Button('修改').onClick(() => { this.user.name = '哇哈哈' }) } } }

 1import { UserModel } from '../viewmodel/UserModel'  2import { ChildModel } from '../viewmodel/ChildModel'  3  4@Entry  5@Component  6struct Page02_TaskList {  7 @State user: UserModel = new UserModel(1, 'Helen')  8  9 build() { 10 Column() { 11 ChildModel({ 12 user: this.user 13 }) 14 Text(`${JSON.stringify(this.user)}`) 15 } 16 } 17}
import { UserModel } from '../viewmodel/UserModel' import { ChildModel } from '../viewmodel/ChildModel' @Entry @Component struct Page02_TaskList { @State user: UserModel = new UserModel(1, 'Helen') build() { Column() { ChildModel({ user: this.user }) Text(`${JSON.stringify(this.user)}`) } } }

@Link

双向数据通信,父组件同步子组件更新

 1import { UserModel } from "./UserModel"  2  3@Component  4export struct ChildModel {  5 @Link user: UserModel  6  7 build() {  8 Column() {  9 Text(`${this.user.id}`) 10 Text(`${this.user.name}`) 11 Button('修改').onClick(() => { 12 this.user.name = '哇哈哈' 13 }) 14 } 15 } 16}
import { UserModel } from "./UserModel" @Component export struct ChildModel { @Link user: UserModel build() { Column() { Text(`${this.user.id}`) Text(`${this.user.name}`) Button('修改').onClick(() => { this.user.name = '哇哈哈' }) } } }

固定传参

 1// 父组件  2@Entry  3@Component  4struct Page02_TaskList {  5 @State message: string = ''  6  7// 子组件  8build() {  9 Column() { 10 ChildModel({ 11 message: this.message 12 })
// 父组件 @Entry @Component struct Page02_TaskList { @State message: string = '' // 子组件 build() { Column() { ChildModel({ message: this.message })

@Provide与@Consume

1爷孙组件双向同步 2@Provide在父组件中使用 3@Consume在子或孙组件中使用,无需初始化,值来自@Provide 4可以自行修改变量名称 5类似@Link双向数据更新
爷孙组件双向同步 @Provide在父组件中使用 @Consume在子或孙组件中使用,无需初始化,值来自@Provide 可以自行修改变量名称 类似@Link双向数据更新

 1@Entry  2@Component  3struct Page05_Provide {  4 @State message: string = 'Hello World';  5 @Provide msg: string = 'HarmonyOS'  6  7 build() {  8 Column() {  9 Button('父组件修改') 10 .onClick(() => { 11 this.msg = 'Huawei' 12 }) 13 CompA() 14 } 15 .height('100%') 16 .width('100%') 17 } 18} 19 20@Component 21export struct CompA { 22 @Consume msg: string 23 24 build() { 25 Column() { 26 Text('CompA组件') 27 Button('子组件修改') 28 .onClick(() => { 29 this.msg = 'Huawei' 30 }) 31 CompB() 32 } 33 .width('100%') 34 .height('100%') 35 } 36} 37 38@Component 39export struct CompB { 40 @Consume('msg') myMsg: string 41 42 build() { 43 Column() { 44 Text('CompB组件') 45 Button('孙组件修改') 46 .onClick(() => { 47 this.myMsg = 'Huawei' 48 }) 49 Text(this.myMsg) 50 } 51 .width('100%') 52 .height('100%') 53 } 54}
@Entry @Component struct Page05_Provide { @State message: string = 'Hello World'; @Provide msg: string = 'HarmonyOS' build() { Column() { Button('父组件修改') .onClick(() => { this.msg = 'Huawei' }) CompA() } .height('100%') .width('100%') } } @Component export struct CompA { @Consume msg: string build() { Column() { Text('CompA组件') Button('子组件修改') .onClick(() => { this.msg = 'Huawei' }) CompB() } .width('100%') .height('100%') } } @Component export struct CompB { @Consume('msg') myMsg: string build() { Column() { Text('CompB组件') Button('孙组件修改') .onClick(() => { this.myMsg = 'Huawei' }) Text(this.myMsg) } .width('100%') .height('100%') } }

@Watch

回调函数同步

Powered By 可尔物语

浙ICP备11005866号-12