本文介绍微信小程序中子组件向父组件传值的两种常用方式。第一种通过子组件的triggerEvent方法触发自定义事件并传递参数;第二种通过父组件的selectComponent获取子组件实例,进而直接读取或修改其数据。两种方法各有适用场景,可根据实际需求选择。
第一种方法使用 triggerEvent() 方法
triggerEvent 方法的用法类似于 Vue 中的 emit() 方法
// list.wxml 组件
<view>
<block wx:for="{{data}}" wx:key="*this">
<view class="box-list">
<view class="title">{{item.title}}</view>
<view class="content">
<view>{{item.content}}</view>
<view class="btn">
<button type="primary" size="mini" bindtap="handleTap" data-index="{{index}}">传值</button>
</view>
</view>
</view>
</block>
</view>// list 组件 js
Component({
// 从父组件接收的data 会自动同步到 子组件的data 对象里面
properties: {
data: {
type: Array,
value: []
}
},
methods: {
handleTap(e) {
let { index } = e.currentTarget.dataset;
let data = this.data.data;
// 自定义一个事件,并且传值
this.triggerEvent('myevent',{params: data[index]},{})
},
}
})home.wxml 父组件
<view>
<list bindmyevent="myevent" data="{{list}}" class="list"></list>
</view>
Page({
data: {
list:[{
title: '薛之谦',
content: '《演员》《你还要我怎样》'
},{
title: '第二梦',
content: '《风云1》《风云2》'
}]
},
myevent(e) {
// 这里就是子组件传过来的内容了
console.log(e.detail.params)
}
})第二种方法
页面布局与上述示例保持一致,其中 .list 为子组件对应的 class 名称
// home.js 父组件的js
Page({
onShow() {
const instance = this.selectComponent('.list');
// 打印出来的就是list 组件的实例了,这样就可以获取到子组件所有的数据了!
// 注意!这里也可以调用setData 等方法直接修改组件的值
console.log(instance)
}
})到此这篇关于微信小程序子组件向父组件传值的两种方法的文章就介绍到这了,更多相关微信小程序子组件向父组件传值内容请搜索本站以前的文章或继续浏览下面的相关文章希望大家以后多多支持本站!