微信小程序中子父组件相互传值
父传子:
- 父组件向子组件传递数据可以通过在子组件标签上绑定属性进行
1.在父组件的wxml文件中使用子组件,并为其绑定一个自定义属性,其中custom-data是自定义的属性名,dataFromParent是父组件中的数据
<!--父组件wxml-->
<child-component custom-data="{{dataFromParent}}"></child-component>
2.在子组件的js文件中通过properties字段声明要接收的属性,这里声明了一个名为customData的属性,并指定了其类型为String,初始值为空字符串。
// 子组件js
Component({
properties: {
customData: {
type: String,
value: ''
}
},
// ...
})
3.在子组件的wxml文件中使用customData属性,这里直接显示customData属性对应的值。这样,在父组件中修改dataFromParent的值后,子组件中的customData属性也会随之更新。
<!-- 子组件wxml -->
<view>{{customData}}</view>
子传父:
- 子组件向父组件传递数据可以通过自定义事件来实现
1.在子组件中通过triggerEvent方法触发一个自定义事件,并将数据作为参数传递给父组件,这里在点击按钮后触发了一个名为myevent的自定义事件,并将data作为参数传递给了父组件
// 子组件js
Component({
// ...
methods: {
onTapBtn() {
const data = 'hi, parent'
this.triggerEvent('myevent', {data})
}
}
})
2.在父组件中使用子组件时,绑定要接收事件的函数,并在该函数中获取传递过来的数据,这里在子组件上绑定了myevent事件,并指定其对应的处理函数为onMyEvent。当子组件触发自定义事件后,父组件中的onMyEvent函数会被调用,并且可以通过event.detail获取到传递过来的数据。
<!-- 父组件wxml -->
<child-component bind:myevent="onMyEvent"></child-component>
// 父组件js
Page({
onMyEvent(event) {
console.log(event.detail.data) // 输出 hello parent
}
})```