微信小程序-自定义组件
组件基本使用
创建组件
1、在项目的根目录下创建components文件夹,在components文件中定义所有自定义组件。
2、右键点击“新建Component”
3、输入组件名称之后回车,会生成4个文件:.js、.json、.wxml、.wxss
引用组件
局部引用
1、在需要使用组件的页面.json配置文件中的”usingComponents”节点中声明要引入的组件
1 | "usingComponents": { |
全局引用组件
在app.json中和window节点平级声明”usingComponents”节点,该节点以对象的形式呈现,内部写法同上。
1 | "usingComponents": { |
组件和页面的区别
1、组件的.json文件中需要声明”component”:true属性。
2、组件的.js文件中调用的是Component()函数而非Page()函数。
3、组件的事件处理函数需要定义到methods节点中。
样式隔离
隔离特性
1、两个组件的样式不会相互影响
2、小程序页面的样式不会影响组件的样式
3、组件的样式也不会影响小程序的样式
注意:app.wxss的全局样式对组件无效;只用class选择器会有样式隔离,id选择器、属性选择器、标签选择器不受样式隔离的影响。
修改组件的样式隔离选项
有时候我们希望在外界能控制组件内部的样式,这时可以通过组件options选项中的stylesolation属性修改组件的样式隔离选项。
组件.js:
1 | Component({ |
styleIsolation有以下可选参数:
1、isolated 默认值 启用样式隔离,class指定的样式将不会互相影响。
2、apply-shared 页面wxss样式将影响到自定义组件,但组件wxss中指定的样式不会影响页面。
3、shared 表示页面wxss将影响到自定义组件,自定义组件wxss中指定的样式也会影响页面和其他设置了apply-shared或shared的自定义组件。
properties
用于父组件向子组件传递数据
简单使用
父组件:
1 | <test1 max="10"></test1> |
子组件:
1 | Component({ |
注意事项
在小程序组建中,properties属性是可读写的,data和properties指向了同一对象,所以想要修改properties属性的值也可以使用this.setData()函数。
1 | this.properties===this.data;//true |
数据监听器
相当于VUE的watch。
监听多个数据
写在组件配置对象的observers属性上,以函数的形式:
1 | Component({ |
监听对象的属性
1 | Component({ |
监听对象所有属性
可以使用通配符**来监听对象中所有属性的变化:
1 | Component({ |
给某数据的某一属性赋值
1 | Component({ |
纯数据字段
纯数据字段指的是哪些不用于页面渲染的data字段,该字段不会展示在页面上也不会传递给其他组件,设置为纯数据字段有利于提升页面更新的性能。
使用方法
在Component构造器的options节点中,指定pureDataPattern为一个正则表达式,字段名符合这个正则表达式的字段将成为纯数据字段:
1 | Component({ |
组件的生命周期
主要的生命周期钩子
小程序组件的生命周期如下:
生命周期钩子写在Component配置对象的lifetimes属性中,以对象的形式:
1 | Component({ |
其中最重要的生命周期有:
1、created
组件实例刚创建好会触发,此时不能调用setData(),一般在这个生命周期钩子中给this添加一些自定义的属性。
2、attached
组件完全初始化完毕进入页面节点树后会触发,绝大多数初始化在这时候进行。
3、detached
离开页面节点树后触发,一般在这里做清除事件监听等任务。
组件所在页面的生命周期
当自定义组件行为依赖于页面状态时使用。
组件所在页面的生命周期写在Component配置对象的pageLifeTimes属性中,以对象的形式。
1 | Component({ |