1.页面向组件之间的传值
<copy show="{{list}}"></copy>
首先引用了自定义组件之后,在组件标签上进行一个自定义属性 show ="{{list}}" list则是要传递的页面数据,
然后在组件js里的properties进行值的获取:
properties: {
'show': {
type: 'Array',
value: '',
observer: function(newVal, oldVal) {
console.log(newVal)
console.log(oldVal)
this.setData({
list: newVal
})
}
}
},
这就是页面传递值给组件的一个流程,其中observer(监听上级页面)的优先级是高于小程序的onLoad和onReady的,即在这2个生命周期之前执行。
2.组件向页面传值
首先也是需要自定义一个属性事件,比如:
<copy show="{{list}}" bind:list='index'></copy>
然后在组件的方法里使用 this.triggerEvent('list', id),其中 第一个参数则为自定义属性名,第二个为要传递的参数,比如:
子组件:
methods: {
setId(e) {
let id = e.currentTarget.dataset.id
this.triggerEvent('list', id)
}
然后在页面进行取值和操作
data: {
list: []
},
index(e) {
let id = e.detail // 获取传递过来的数据
// 根据id请求数据,然后重新setData
let newData = [1,2,3]
this.setData({
list: newData
})
}
顺便一提这个传递是在组件方法setId()触发之后,然后回立即触发定义的页面取值方法index()。
简单叙述就这些了,想请原理有时间在琢磨写出