微信小程序-自定义组件

1.如何新建自定义组件

​ **步骤:**在根目录下,新建components文件夹,然后再新建组件对应的文件夹,再在当前文件夹新建component即可生成对应的.js/.json/.wxml/.wxss文件
自定义组件

2.组件和页面的区别

  • ​ .json文件中需要声明“components”:true属性
  • ​ .js文件中调用的是Components()函数
  • ​ 组件的事件处理函数需要定义到methods节点中

3.自定义组件的引用

3.1全局引用

​ 在app.json中,添加usingComponents属性,属性值为对应的组件名称

  //属性
	"usingComponents": {
        //组件名 : 路径
    "my-test":"/components/test/test"
   } 

3.2局部使用

​ 在页面的.json中usingComponents配置即可

4.自定义组件样式隔离

​ 4.1app.wxss中的全局样式对自定义组件无效

​ 4.2只有class选择器会有样式隔离效果,id选择器、属性选择器、标签选择器不受样式隔离的影响

​ 4.3 自定义样式隔离特性能够防止组件内外样式相互干扰,若希望在外界能够控制组件内部的样式,可以通过styleisolation修改组件的样式隔离选项。

//在自定义组件的.json文件添加配置
{
  "styleIsolation":"isolated"
}
可选值默认值描述
isolated相互隔离
apply-shared页面wxss影响到组件
shared相互影响

5.自定义组件之属性properties

用来接收外界传递到数组中的数据

<!--my-test是自定义组件名,max是自定义属性-->
<my-test max="6"></my-test>
Component({
  /**
   * 组件的属性列表
   */
  properties: {
      属性名:{
          type:Number,//属性的数据类型
          value:3 //属性默认值
      },
      //简写
      属性名:数据类型
  }
 )

6.自定义组件之数据监听器

**作用:**监听和响应任何属性和数据字段的变化

  •  Component({
       	observers:{
             //当字段相似内容比较多时,可以使用通配符**表示
             '字段A,字段B':function(字符A的新值,字段B的新值 ){
               //do something  
             }
       	}
     )
    

7.自定义组件-纯数据字段

**概念:**指的是不用于界面渲染的data字段

应用场景及好处:

​ 在当前组件内部使用。有助于提升页面更新的性能。

使用规则:

​ 在Component构造器的options节点中,指定pureDataPattern为正则表达式

​ 在data中定义的字段名符合这个正则表达式的字段为纯数据字符

Component({
  options: {
  		//以_开头的数据
      pureDataPattern:/^_/
  },
  data:{
      // 纯数据字段,符合了正则表达式
      _dataInLogic:0// 普通数据字段
      number: 1
  }
})

8.自定义组件-组件生命周期

8.1 组件主要的生命周期函数

​ 重要的声明周期函数有3个,分别是created/attached/detached。

created生命周期函数: 组件实例刚被创建好的时候被触发, 不能调用setData函数

attached生命周期函数: 组件初始化完毕进入页面节点树后被触发, this.data初始化完毕

detached生命周期函数: 组件离开页面节点树后被触发

Component({
  lifetimes:{
    //页面加载后
    attached(){},
    //页面退出后
    detached(){}
  }

8.2 组件所在页面的生命周期函数

​ 自定义组件的行为依赖于页面状态的变化,根据组件所在页面的生命周期函数定义行为

​ 需要定义在pageLifeTimes节点中:

Component({
  pageLifetimes:{
    //页面被展示时调用的函数
    show:function(){},
    //页面被隐藏时调用的函数
    hide:function(){},
     //页面尺寸变化时调用的函数
    resize:function(size){},
  }

9.自定义组件-插槽

​ 自定义组件的wxml结构中,可以提供 一个 <slot></slot> 节点座位插槽,用于承载组件使用者提供的wxml结构。

<!--自定义组件-->
<view class="wrapper">
  <view>这里是组件的内部节点</view>
  <slot></slot>
</view>
<!--组件使用-->
<component-tag-name>
	<view>这里是插入到组件slot中的内容</view>
</component-tag-name>

启动多个插槽:

​ 在组件的.js文件中,通过以下代码启用:

Component(
{
    options:{
        multipleSlots:true
    }
})

定义多个插槽:

​ 在.wxml中使用多个<slot>标签,以不同的name来区分不同的插槽

<!--自定义组件-->
<view class="wrapper">
  <slot name="s1"></slot>
  <slot name="s2"></slot>
</view>	

10.父子组件之间的通信的3种方式

10.1 属性绑定

​ 父组件向子组件的指定属性设置数据,仅能设置Json兼容的数据

<!--父组件-->
<view>
   {{count}}
</view>

<!--子组件-->
<my-test3 count="{{count}}"></my-test3>
//父组件的count属性定义
Page({
data: {
    count:0
 }
})

//子组件的count属性定义
Component({
  /**
   * 组件的属性列表
   */
  properties: {
    count:Number
  }
})

10.2 事件绑定

​ 子组件向父组件传递数据,可以传递任意数据

4步:

​ 01.在父组件的js中定义一个函数

​ 02.在父组件的wxml中,通过自定义事件的形式,将定义的函数引用传递给子组件

<!--bind:自定义事件名称="函数名"-->
<my-test3  bind:sync="函数名"></my-test3>

​ 03.在子组件的js中,通过在js文件的methods中,调用 this.triggerEvent(‘自定义事件名称’,{参数对象}) 将数据发送给父组件

​ 04.父组件定义的函数体中,通过e.detail获取到子组件传递来的数据

Page({
    //注意添加参数e
    函数名(e){
        this.setData(
          {
            count:e.detail.参数属性名
          }
        )
      }
  }
)

10.3 获取组件实例

​ 父组件通过在js文件中,通过定义函数,在函数中使用 this.selectComponent() 函数获取子组件实例对象

​ 这样可以直接访问子组件的任意数据和方法

//获取子节点
getChild(){
    const child = this.selectComponent('子组件的类或id选择器')
    //调用子组件的setData方法设置数据
    child.setData({})
}	

11.自定义组件-代码共享-behaviors

01.每个behavior可以包含一组属性、数据、声明周期函数和方法

​ 特点:1个组件可以引用多个behavior, 1个behavior也可以引用多个behavior

​ 例:在根目录下创建behavior.js,调用哪个Behavior()构造方法创建一个共享的behavior实例
behavior

02.在组件的js文件中通过require()方法导入,挂载后即可访问behavior中的数据或方法

//导入
const myBehavior =require('../../behavior/behavior')
//过载
Component({
  behaviors:[myBehavior]
 })
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值