微信小程序(八)自定义组件

作者: zcwfeng | 来源:发表于2021-05-16 00:46 被阅读0次

自定义组件

Component 构造器

Component参考文档

1.自定义组件的创建

组件定义:

{
    "component": true
}

注意:在组件wxss中不应使用ID选择器、属性选择器和标签名选择器。

页面使用:

{
  "usingComponents": {
    "zcw-bar":"/components/zcw-bar/zcw-bar"
  }
}
<!-- 以下是对一个自定义组件的引用,两种方式都可以 -->
<zcw-bar></lzcw-bar>
<zcw-bar/>

2.页面向组件传递数据和样式

2-1.数据绑定

properties属性用于页面给自定义组件传递数据。

组件定义:

Component({
    properties: {
        //barInfo:Object
        barInfo:{
            type:Object,
            value:null,
            // 监听数据改变
            observer:function(newValue,oldValue){
                console.log('监听数据改变',newValue,oldValue);
            }
        }
    }
})
<view>{{barInfo}}</view>

页面使用:

<zcw-bar barInfo="{{barInfo}}"/>

2-2.样式传递

通过externalClasses属性进行样式传递。

组件定义:

Component({
    externalClasses:['barclass']
})

<view class='barclass'></view>

页面使用:

<zcw-bar barclass="color"/>

.color{
    color:red;
}

3.页面响应组件的事件

组件定义:

<view bindtap="bindSearch"/>

Component({
    methods: {
        bindSearch:function(){
            // 第一个参数:事件名称
            // 第二个参数:要传递的数据
            // 第三个参数:触发事件的选项,bubbles,composed,capturePhase
            this.triggerEvent("search",{name:"Zcw",age:18},{});
        }
    }
})

页面使用:

<zcw-bar bindsearch="bindSearch"/>

Page({
    bindSearch: function(event) {
        console.log("点击搜索按钮",event);
    }
})

通过event中的detail就可以得到数据,打印结果如下:


detail数据.png

4.获取组件对象

  • 父组件还可以通过 this.selectComponent 方法获取子组件实例对象,这样就可以直接访问组件的任意数据和方法。

5.slot -- 插槽

5-1.单插槽

组件定义:

<view>
    <slot/>
</view>

页面使用:

<zcw-bar>
    <view>我会替换组件的slot</view>
</zcw-bar>

5-2.多插槽

组件定义:

<view>
    <!-- 使用name区分不同slot-->
    <slot name = "slot1"/>
    <slot name = "slot2"/>
</view>

Component({
    options:{
        // 在组件定义时的选项中启用多slot支持。
        multipleSlots:true
    }
})
<zcw-bar>
    <!-- 使用 slot属性 指定替换哪个slot标签 -->
    <view slot="slot1">我会替换组件的slot1</view>
    <view slot="slot2">我会替换组件的slot2</view>
</zcw-bar>

6.Component属性

  • properties:定义传入的属性。
  • data:定义内部的属性。
  • methods:组件的方法,包括事件响应函数和任意的自定义方法,以及页面的生命周期方法(即 on 开头的方法,只有当Component定义的是页面才有效)
  • options:额外配置选项。
  • externalClasses:组件接受的外部样式类。
  • observers:组件数据字段监听器,用于监听 properties 和 data 的变化。只能拿到newValue。
  • pageLifetimes:组件所在页面的生命周期声明对象。
  • lifetimes:组件生命周期声明对象。

7.自定义组件的注意事项

  • 因为 WXML 节点标签名只能是小写字母、中划线和下划线的组合,所以自定义组件的标签名也只能包含这些字符。
  • 自定义组件也是可以引用自定义组件的,引用方法类似于页面引用自定义组件的方式(使用 usingComponents 字段)。
  • 自定义组件和页面所在项目根目录名不能以“wx-”为前缀,否则会报错。

相关文章

网友评论

    本文标题:微信小程序(八)自定义组件

    本文链接:https://www.haomeiwen.com/subject/jpabdltx.html