【微信小程序】自定义组件(三)

简介: 【微信小程序】自定义组件

插槽


1、什么是插槽


在自定义组件的wxml结构中,可以提供一个<solot> 节点(插槽),用于承载组件使用者提供的wxml结构


2、单个插槽


小程序中,默认每个自定义组件中只允许使用一个<slot>进行占位,这种个数上的限制叫做单个插槽。


<view class="wrapper">
  <view>这里是组件的内部节点</view>
  <!-- 对于不确定的内容,可以使用<solt>进行占位,具体内容有组件的使用者决定 -->
  <slot></slot>
</view>
<!-- 组件的使用者 -->
<component-tag-name>
  <!-- 这部分内容将被放置在组件的使用者决定 -->
  <view>这里是插入到组件的slot的内容</view>
</component-tag-name>


3、定义多个插槽


<view class="wrapper">
  <!-- name为before的第一个slot插槽 -->
  <slot name="before"></slot>
  <!-- name为after的第一个slot插槽 -->
  <slot name="after"></slot>
</view>
-------------------
<component-tag-name>
  <!-- 这部分内容将被放置在组件的使用者决定 -->
  <view slot="before">这里是插入到组件的before的内容</view>
  <view slot="after">这里是插入到组件的after的内容</view>
</component-tag-name> -->


父子组件之间的通信


1、父子组件之间的通信的3种方式


①属性绑定


用于父组件向子组件的指定属 性设置数据,仅能设置JSON兼容的数据


②事件绑定


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


③获取组件实例


父组件还可以通过 this.selectComponent()获取子组件实例对象,

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


2、事件绑定


事件绑定用于实现子向父传值,可以传递任何类型的数据。


①在父组件的js中,定义一个函数,这个函数即将通过自定义事件的形式,传递给子组件


//再父组件中定义syncCount方法
  //将来,这个方法会被传递给子组件,使子组件进行调用
  syncCount(){
    console.log('syncCount');
  },


②在父组件的wxml中,通过自定义事件的形式,将步骤1中定义的函数引用,传递给子组件


<!-- 使用bind:自定义事件名称 -->
<my-test3 count="{{count}}" bind:sync='syncCount'></my-test3>
<!-- 或者使用bind后面直接写上自定义事件名称  -->
<my-test3 count="{{count}}" bindsync='syncCount'></my-test3>


③在子组件的js中,通过调用this.triggerEvent('自定义事件名称’, {/*参数对象*/}),将数据发送到父组件


addCount(){
      this.setData({
        count:this.properties.count+1
      })
      this.triggerEvent('sync',{value:this.properties.count})
    }

④在父组件的js中,通过e.detail获取到子组件传递过来的数据


syncCount(e){
  this.setData({
    count:e.detail.value
  })
}


3、behaviors


behaviors是小程序中,用于实现组件间代码共享的特性,类似于Vue.js 中的"mixins"


  • behaviors的工作方式


每个behavior可以包含- 组属性、数据、生命周期函数和方法。组件引用它时,它的属性、数据和方法会被合并到组件中。


每个组件可以引用多个behavior, behavior也可以引用其它behavior.


  • 创建behaviors
module.exports=Behavior({
  //属性节点
  properties:{},
  //私有数据节点
  data:{usernameL:'zs'},
  //事件处理函数和自定义方法节点
  methods:{},
  // /其他节点
})



  • behavior中所有可用的节点
可用的节点 类型 是否必填 描述
properties object Map 同组件的属性
data object 同组件的数据
methods object 同自定义组件的方法
behaviors String Array 引入其它的behavior
created Function 生命周期函数
attached Function 生命周期函数
ready Function 生命周期函數
moved Function 生命周期函数
detached Function 生命周期函数


  • 同名字段的覆盖和组合规则


组件和它引用的 behavior 中可以包含同名的字段,对这些字段的处理方法如下:


  • 如果有同名的属性 (properties) 或方法 (methods):


  1. 若组件本身有这个属性或方法,则组件的属性或方法会覆盖 behavior 中的同名属性或方法;


  1. 若组件本身无这个属性或方法,则在组件的 behaviors 字段中定义靠后的 behavior 的属性或方法会覆盖靠前的同名属性或方法;


  1. 在 2 的基础上,若存在嵌套引用 behavior 的情况,则规则为:引用者 behavior 覆盖 被引用的 behavior 中的同名属性或方法。


  • 如果有同名的数据字段 (data):


  • 若同名的数据字段都是对象类型,会进行对象合并;


  • 其余情况会进行数据覆盖,覆盖规则为: 引用者 behavior > 被引用的 behavior靠后的 behavior > 靠前的 behavior。(优先级高的覆盖优先级低的,最大的为优先级最高)


  • 生命周期函数和 observers 不会相互覆盖,而是在对应触发时机被逐个调用:


  • 对于不同的生命周期函数之间,遵循组件生命周期函数的执行顺序;


  • 对于同种生命周期函数和同字段 observers ,遵循如下规则:


  • behavior 优先于组件执行;


  • 被引用的 behavior 优先于 引用者 behavior 执行;


  • 靠前的 behavior 优先于 靠后的 behavior 执行;


  • 如果同一个 behavior 被一个组件多次引用,它定义的生命周期函数和 observers 不会重复执行
目录
相关文章
|
1月前
|
人工智能 小程序 API
【一步步开发AI运动小程序】十三、自定义一个运动分析器,实现计时计数02
本文介绍如何利用“云智AI运动识别小程序插件”开发AI运动小程序,详细解析了俯卧撑动作的检测规则构建与执行流程,涵盖卧撑和撑卧两个姿态的识别规则,以及如何通过继承`sports.SportBase`类实现运动分析器,适用于小程序开发者。
|
1月前
|
人工智能 小程序 API
【一步步开发AI运动小程序】十二、自定义一个运动分析器,实现计时计数01
随着AI技术的发展,AI运动APP如雨后春笋般涌现,如“乐动力”、“天天跳绳”等,推动了云上运动会、线上健身等热潮。本文将指导你从零开始开发一个AI运动小程序,利用“云智AI运动识别小程序插件”,介绍运动识别原理、计量方式及运动分析器基类的使用,帮助你在小程序中实现运动计时和计数功能。下篇将继续探讨运动姿态检测规则的编写。
|
19天前
|
小程序 前端开发 数据挖掘
圈子论坛社区交友系统开源版小程序源码,自定义小程序管理社区圈子软件开发,打造受欢迎社交圈
通过获取开源版小程序源码、进行自定义小程序管理社区圈子软件开发以及注重用户体验和功能模块的设计,可以打造一个受欢迎的社交圈。同时,需要不断优化和完善系统,以满足用户不断变化的需求和期望。
64 0
|
2月前
|
小程序 前端开发 JavaScript
在线课堂+工具组件小程序uniapp移动端源码
在线课堂+工具组件小程序uniapp移动端源码
48 0
在线课堂+工具组件小程序uniapp移动端源码
|
3月前
|
小程序 数据可视化 JavaScript
微信小程序:轻松实现时间轴组件
本文介绍了如何在微信小程序中实现一个可视化时间轴组件。该组件适用于展示用户资金流动、投资结算等时间节点,帮助用户直观了解资金去向。时间轴支持自定义节点形状、显示序号、倒序排列等功能,并通过插槽灵活定义动态内容。文中详细介绍了组件的设计与使用方法,以及如何结合动态 slot 实现自定义操作。该组件为展示用户资金信息提供了美观、易用的解决方案。
90 1
微信小程序:轻松实现时间轴组件
|
3月前
|
小程序
微信小程序动态tabBar实现:基于自定义组件,灵活支持不同用户角色与超过5个tab自由组合(更新版)
微信小程序动态tabBar实现:基于自定义组件,灵活支持不同用户角色与超过5个tab自由组合(更新版)
744 1
|
3月前
|
小程序 搜索推荐 API
微信小程序:自定义关注公众号组件样式
尽管关注公众号组件的样式固定且不可修改,但产品经理的需求却需要个性化的定制。在这种情况下,我们需要寻找解决方案,以满足这些特殊需求,尽管这可能有点棘手。
96 0
微信小程序:自定义关注公众号组件样式
|
8天前
|
移动开发 小程序 前端开发
超详细攻略!uniapp陪玩系统,打包陪玩小程序、H5需要注意什么?
陪玩系统的打包过程涵盖APP、小程序和H5平台。APP打包需使用uni-app开发工具,配置项目信息并选择云打包;小程序打包需在微信公众平台注册账号并提交审核;H5打包则直接通过uni-app生成文件并上传至服务器。各平台需注意权限配置、代码规范及充分测试,确保应用稳定性和兼容性。
|
3月前
|
移动开发 小程序 数据可视化
基于npm CLI脚手架的uniapp项目创建、运行与打包全攻略(微信小程序、H5、APP全覆盖)
基于npm CLI脚手架的uniapp项目创建、运行与打包全攻略(微信小程序、H5、APP全覆盖)
440 3
|
3月前
|
小程序 API
微信小程序更新提醒uniapp
在小程序开发中,版本更新至关重要。本方案利用 `uni-app` 的 `uni.getUpdateManager()` API 在启动时检测版本更新,提示用户并提供立即更新选项,自动下载更新内容,并在更新完成后重启小程序以应用新版本。适用于微信小程序,确保用户始终使用最新版本。以下是实现步骤: ### 实现步骤 1. **创建更新方法**:在 `App.vue` 中创建 `updateApp` 方法用于检查小程序是否有新版本。 2. **测试**:添加编译模式并选择成功状态进行模拟测试。
67 0
微信小程序更新提醒uniapp