属性绑定
父向子传值 只能传递put数据的数据 无法将方法传递给子组件
// 父元素
// xxx.wxml
<view>
// 使用子组件 并绑定值 传递给子组件
<test data="{{count}}"></test>
<text>=====================</text>
<view>父组件定义的count的值是{{count}}</view>
</view>
// ==============================
// xxx.js
Page({
data: {
count:100
},
})
// ==============================
// xxx.json
{
"usingComponents": {
// 注册子组件
"test":"/components/test/test"
}
}
// ========================================================
// 子组件
// xxx.wxml
<view>
<text>父组件传递的数据{{data}}</text>
</view>
// ==============================
// xxx.js
Component({
properties:{
// 在子组件内接受父元素传递的数据
data:Number
}
})
事件绑定
子向父传值 可以传递任何类型的数据
父元素 定义一个函数
将定义的函数传递给子组件
bind:自定义事件名称 = 函数
bind自定义事件名称 = 函数
子组件调用 this.triggerEvent('自定义事件名称',{传递的数据}) 方法 将数据发送到父组件
父组件使用e.detail获取子组件传递的数据
1.0 给父元素的xxx.wxml 调用子组件的时候 绑定一个事件函数
<test data="{{count}}" bind:add="addCount"></test>
2.0 在父元素的xxx.js文件里面实现事件函数
Page({
data: {
count:100
},
addCount(e){
// 使用e.detail接收子组件传递的参数
console.log(e.detail);
this.setData({
count:e.detail.value
})
},
})
3.0 子组件调用方法的时候 触发事件
<button bindtap="adds">+1</button>
Component({
// 接收父元素传递的数据
properties: {
data:Number
},
adds(){
this.setData({
data:this.properties.data+1
})
// 触发自定义事件 并传递数据给父元素
this.triggerEvent('add',{value:this.properties.data})
}
})
获取子组件的实例对象
父元素里面调用 this.selectComponent('id或者class选择器') 获取子组件的实例对象
从而直接访问子组件的任意数据和方法
<view>
<test data="{{count}}" bind:add="addCount" class="component" id="component"></test>
<button bindtap="getComponent">获取子组件实例</button>
</view>
Page({
getComponent(){
console.log(this.selectComponent('.component'));
const child = this.selectComponent('.component')
child.setData({
data:child.properties.data+1
})
},
})