微信小程序 自定义组件和父子组件的传参

本文介绍了微信小程序中如何创建自定义组件,包括新建目录结构、编写组件模板和样式,以及重点讲解了父子组件之间的参数传递,包括父组件向子组件传参和子组件向父组件回调传参。此外,还提到了其他微信小程序相关教程链接。

一. 新建目录结构

1.在 pages 同级目录下,新建 components 文件夹,用于存放不同的组件
在这里插入图片描述
2.新建组件文件夹,名称和功能对应
在这里插入图片描述
3.右键选择 “新建组件”,输入名称,自动生成四种类型的文件
在这里插入图片描述

二. 自定义组件

1.在需要使用自定义组件页面的 json 文件中添加引用
在这里插入图片描述
2.在自定义组件的 wxml 文件中编写组件模版
在这里插入图片描述
wxml:

<!--components/position-list/position-list.wxml--&
### 微信小程序中 Component 组件传参及接收方法 在微信小程序开发中,`Component` 是构建自定义组件的核心工具。通过 `Component`,可以实现父子组件之间的数据传递事件通信。以下是关于微信小程序中 `Component` 的传参、接收以及数据绑定的详细说明。 --- #### 1. 父组件向子组件传参 父组件可以通过属性绑定的方式将数据传递给子组件。子组件需要通过 `properties` 定义可接收的参数,并通过 `this.properties` 获取这些参数[^2]。 **父组件示例:** ```html <view> <child-component message="{{parentMessage}}"></child-component> </view> ``` **子组件定义:** ```javascript Component({ properties: { message: { // 定义可接收的参数 type: String, // 参数类型 value: '' // 默认值 } }, methods: { showMessage() { console.log(this.properties.message); // 输出父组件传递的数据 } } }); ``` --- #### 2. 子组件父组件传参组件可以通过触发事件的方式将数据传递给父组件父组件需要监听子组件的事件,并通过事件对象的 `detail` 属性获取传递的数据[^1]。 **子组件触发事件:** ```javascript Component({ methods: { sendDataToParent() { this.triggerEvent('customEvent', { data: '子组件传递的数据' }); // 触发事件并传递数据 } } }); ``` **父组件监听事件:** ```html <view> <child-component bindcustomEvent="handleCustomEvent"></child-component> </view> ``` ```javascript Page({ handleCustomEvent(event) { console.log(event.detail.data); // 接收子组件传递的数据 } }); ``` --- #### 3. 数据绑定与动态更新 微信小程序支持通过 `data` 属性进行数据绑定,并且可以通过 `setData` 方法动态更新组件内部的状态。这种机制适用于组件内的数据管理[^5]。 **组件内部数据绑定:** ```javascript Component({ data: { message: '这是定义在组件内的消息!' }, methods: { updateMessage() { this.setData({ // 动态更新数据 message: '组件函数改变了消息!' }); } } }); ``` --- #### 4. 获取子组件实例 父组件可以通过 `selectComponent` 或 `selectAllComponents` 方法获取子组件的实例,从而直接访问子组件的方法或数据[^3]。 **父组件获取子组件实例:** ```javascript Page({ onLoad() { const child = this.selectComponent('#child'); // 获取子组件实例 child.childMethod(); // 调用子组件的方法 } }); ``` **子组件定义方法:** ```javascript Component({ methods: { childMethod() { console.log('子组件的方法被调用了'); } } }); ``` --- #### 5. 跨层级组件通信(EventChannel) 对于跨层级的组件通信,可以使用 `EventChannel`。它允许父组件在创建子组件时传递一个事件通道,子组件可以通过该通道与父组件或其他组件通信[^1]。 **父组件创建 EventChannel:** ```javascript Page({ onShareAppMessage() { const eventChannel = this.getOpenerEventChannel(); eventChannel.emit('acceptDataFromOpenerPage', { data: '来自父组件的数据' }); } }); ``` **子组件接收数据:** ```javascript Component({ attached() { const eventChannel = this.getOpenerEventChannel(); eventChannel.on('acceptDataFromOpenerPage', (data) => { console.log(data); // 接收父组件传递的数据 }); } }); ``` --- ### 示例总结 以下是一个完整的父子组件通信示例: **父组件:** ```html <view> <child-component message="{{parentMessage}}" bindcustomEvent="handleCustomEvent"></child-component> </view> ``` ```javascript Page({ data: { parentMessage: '来自父组件的消息' }, handleCustomEvent(event) { console.log(event.detail.data); // 接收子组件传递的数据 } }); ``` **子组件:** ```javascript Component({ properties: { message: { type: String, value: '' } }, methods: { sendDataToParent() { this.triggerEvent('customEvent', { data: '子组件传递的数据' }); } } }); ``` --- ###
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

春日安然

可以赏个鸡腿吃嘛~

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值