注意:在组件 wxss 中不应使用 ID 选择器、属性选择器和标签名选择器。
{
"component": true
}
{
"usingComponents": {
"test":"/components/test/test"
},
}
<test> </test>
data:{
dataMsg:{
name:'张三',
sex:'李四'
}
//title直接传递的是写死的字符串,dataMsg是传递的是动态中的数据,是父组件.js文件中的data中的dataMsg
<test title="测试" msg="{{dataMsg}}"> </test>
Component({
properties: {
msg: {
type: Object
},
title: {
type: String
}
},
data: {
},
/**
* 页面的初始数据
*/
methods: {
}
})
<text>{{title}} {{msg.name}}</text>
<!-- 当自定义组件触发“myevent”事件时,调用“onMyEvent”方法 -->
<test bindmyevent="onMyEvent" />
<!-- 或者可以写成 -->
<test bind:myevent="onMyEvent" />
Page({
onMyEvent: function(e){
e.detail // 自定义组件触发事件时提供的 detail 对象(接收子组件传递过来的值)
}
})
<!-- 在自定义组件中 -->
<button bindtap="onTap">点击这个按钮将触发“myevent”事件</button>
Component({
properties: {},
methods: {
onTap: function(e){
//可以consolo.log(e)查看触发onTap事件时传递的值
var myEventDetail = {} // detail对象,提供给事件监听函数(需要传递给父组件的值)
var myEventOption = {
bubbles: false,//事件是否冒泡,默认false
composed: false,//事件是否可以穿越组件边界,为 false 时,事件将只能在引用组件的节点树上触发,不进入其他任何组件内部,默认false
capturePhase: false,//事件是否拥有捕获阶段,默认false
} // 触发事件的选项
this.triggerEvent('myevent', myEventDetail, myEventOption)
}
}
})
注意:在使用自定义组件+递归的方式实现多级菜单,需要在组件的.json文件中自己引入这个组件(标题2中的步骤1),自己使用自己,不需要再像页面中那样bind:myevent="onMyEvent"(个人理解为绑定一个事件),可以利用触发事件的选项(冒泡,捕获)
(学习小程序自定义组件也有一段时间了,之前在工作中的项目有用到,现在才来总结。自己在弄递归组件的时候也走了很多弯路,没有及时总结,可能有些地方不太正确,印象没有那么深刻了)
大家也可以自己到微信小程序官方文档上查看学习一下自定义组件链接: 微信小程序自定义组件官方文档