评论

微信小程序-父子组件通讯(传值)

微信小程序父子组件之间数据传递

目录

1.父组件传值给子组件

2.子组件传值给父组件


vue、微信小程序都能封装组件,那么就会涉及到一个问题,组件之间的通讯

1.父组件传值给子组件

父组件使用子组件:

<Tabs tabs="{{tabsList}}">
.....
.....

组件中:

/**
 * 组件的属性列表
 */
properties: {
  tabs: {
    // 类型
    type: Array,
    // 默认值
    value: []
  }
},
// 监听传入的变量,当传入的值发生变化时,触发方法
observers: {
  'tabs': function (val) {
    // val=》就是父组件传入组件中的tabsList数据
    console.log(val);
  }
},
data: {

},

/**
 * 子组件的方法列表
 */
methods: {
  //子组件 发生点击事件时触发
  handleItemTap (e) {
    // 1 获取点击的索引
    const { index } = e.currentTarget.dataset;
    // 2 触发 父组件中的事件,传递数据给父组件  把当前点击的index数据传给父组件
    this.triggerEvent("tabsItemChange", { index: index });
  }
}

这样,就能将tabsList这个数组传给子组件中的tabs变量,以供给子组件使用了

注意,在子组件中得到父组件传入的数据,不用再到data中声明一次,直接通过this.data.tabs就能拿到传入的数据了。


2.子组件传值给父组件

一般在子组件中做了某些操作后,就要返回数据给父组件,最常见的就是:子组件中点击后触发一个方法,返回数据给父组件

this.triggerEvent(“方法名称”, {key: val });

这样就能将 {key: val } 这个数据通过一个方法返回给父组件

而父组件中,需要通过bind绑定子组件返回的这个方法,进而拿到传过来的数据


接下来用这个来做演示:this.triggerEvent(“tabsItemChange”, {name: ‘cj’ });

tabsItemChange  ====> 就是bind要绑定的方法,至于父组件中要给这个绑定的方法关联什么名字的函数,随便起名字都行,这里我就起名叫做【getSonNameChange】

 <Tabs tabs="{{tabsList}}" bindtabsItemChange="getSonNameChange">

然后在父组件的js文件中声明这个函数,获取子组件传过来的数据,注意:是在父组件的js中定义这个函数!

  // 获取从子组件传回来的数据
  getSonNameChange (e) {
    //  获取子组件传过来的数据
    const { name } = e.detail 
  },

此时,就能获取到子组件传给父组件的数据了


注意: 子组件可以直接传一个对象给父组件,这样就不用把每个键值对都写出来了

    handleItemTap (e) {
      const sonData = { key1: value1, key2: value2, key3: value3 }
      // 2 触发 父组件中的事件,传递数据给父组件 
      this.triggerEvent("tabsItemChange", sonData);
    }
点赞 4
收藏
评论

1 个评论

  • 红小豆
    红小豆
    08-02

    写的不错,收藏了

    08-02
    赞同
    回复
登录 后发表内容