一 . 自定义组件
类似vue或者react中的自定义组件
1. 创建⾃定义组件
类似于页面,一个自定义组件由 json,wxml,wxss,js,4个文件组成
在⽂件夹内 components/myHeader,创建组件 名为 myHeader
2.声明组件
⾸先需要在组件的 json⽂件中进⾏⾃定义组件声明
myHeader.json
{
"component": true
}
3. 注册组件
在组件的 js⽂件中,需要使⽤ Component()来注册组件,并提供组件的属性定义、内部数据和⾃定义⽅法
myHeader.js
Component({
properties: {
// 这里定义了innerText属性,属性值可以在组件使用时指定
innerText: {
// 期望要的数据是 string类型
type: String,
}
},
data: {
// 这里是一些组件内部数据
someData: {}
},
methods: {
// 这里是一个自定义方法
customMethod: function(){}
}
})
4.声明引⼊⾃定义组件
⾸先要在⻚⾯的 json⽂件中进⾏引⽤声明。还要提供对应的组件名和组件路径
index.wxml
// 引用声明
"usingComponents": {
// 要使用的组件的名称 // 组件的路径
"my-header":"/components/myHeader/myHeader"
}
}
5.⻚⾯中使⽤⾃定义组件
<view> <!-- 以下是对一个自定义组件的引用 --> <my-header inner-text="Some text"> <view>用来替代slot的</view> </my-header> </view>
6.定义段与⽰例⽅法
Component构造器可⽤于定义组件,调⽤ Component构造器时可以指定组件的属性、数据、⽅法等。

7.组件-⾃定义组件传参
1. ⽗组件通过属性的⽅式给⼦组件传递参数
2. ⼦组件通过事件的⽅式向⽗组件传递参数
过程:
1. ⽗组件 把数据 {{tabs}}传递到 ⼦组件的 tabItems属性中
2. ⽗组件 监听 onMyTab事件
3. ⼦组件 触发 bindmytap中的 mytap事件
a,⾃定义组件触发事件时,需要使⽤ triggerEvent⽅法,指定 事件名、 detail
4. ⽗ -> ⼦ 动态传值 this.selectComponent("#tabs");
⽗组件代码
// page.wxml
<tabs tabItems="{{tabs}}" bindmytap="onMyTab" >
内容-这里可以放插槽
</tabs>
// page.js
data: {
tabs:[
{name:"体验问题"},
{name:"商品、商家投诉"}
]
},
onMyTab(e){
console.log(e.detail);
},
子组件代码
// com.wxml
<view class="tabs">
<view class="tab_title" >
<block wx:for="{{tabItems}}" wx:key="{{item}}">
<view bindtap="handleItemActive" data-index="{{index}}">{{item.name}}</view>
</block>
</view>
<view class="tab_content">
<slot></slot>
</view>
</view>
// com.js
Component({
properties: {
tabItems:{
type:Array,
value:[]
}
},
/**
* 组件的初始数据
*/
data: {
},
/**
* 组件的方法列表
*/
methods: {
handleItemActive(e){
this.triggerEvent('mytap','haha');
}
}
})