简单写一下小程序组件之间的传值

377 阅读1分钟

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()。
简单叙述就这些了,想请原理有时间在琢磨写出