微信小程序怎么进行传值?

一.父传子
描述:
在父组件中通过自定义属性来传值,在子组件js文件中通过properties属性来进行接受,可以设置默认值,最后在子组件中直接渲染就可以。

1、父组件的json文件中声明对引用子组件

// parents.json
{
  "usingComponents": {
    "w-child": "/components/children/children"
  }
}

2、父组件的wxml中使用子组件

<w-child fatherName='mike fatherage='25'></w-child>

3、子组件在js中获取父组件中传过来的值
properties是组件的对外属性,是属性名到属性设置的映射表,属性设置中可包含三个字段, type 表示属性类型、 value 表示属性初始值、 observer 表示属性值被更改时的响应函数

// child.js
properties: {  // 在这里拿到了数据之后可以直接使用了(在wxml模板渲染,或者js中使用this.data.fatherName/this.properties.fatherName 都能获取到),不要直接修改properties属性中的数据
  fatherName: {
    type: String
  },
  fatherage: Number
}


二.子组件向父组件传值( this.triggerEvent() )
主要实现原理:事件发布与订阅方式(也称为观察者模式)
在子组件中定义方法名中通过this.triggerEvent(‘派发的方法’,‘要传递的数据’)来传递数据 【类似于this.$emit】
在父组件中通过bindconfirm=“方法名”(getConfirmData),然后在getConfirmData方法中有一个data的参数,就是传递过来的值

1、子组件触发自定义事件,传递数据给父组件

<!-- child.wxml-->
<view class="nav" data-index="0" bindtap="onChangeValue">tab</view>

2、子组件在点击事件中主动触发自定义事件

// child.js
onChangeValue(e) {
      var index = e.target.dataset.index      
      //子组件传值给父组件
      let detail = { // 需要传递什么数据就在这个对象中写
        val: index
      }
      // detail 对象,提供给事件监听函数的参数数据
      // changeIndex 是自定义名称事件,父组件中监听使用
      this.triggerEvent('changeIndex', myEventDetail)
    }

3、父组件wxml中监听子组件的自定义事件

<!-- parents.wxml-->
<!-- 注意这里写的事件监听名字-->
 <w-child bind:changeIndex="getIndex" />

4、父组件的js中添加事件函数,获取子组件传递过来的数据

// parents.js
  getIndex( data) { // paramData参数就是子组件的this.triggerEvent()
    console.log(data.detail.val)  // 0
  }

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值