【微信小程序】自定义组件(三)
最佳答案 问答题库868位专家为你答疑解惑
自定义组件
- 插槽
- 1、什么是插槽
- 2、单个插槽
- 3、定义多个插槽
- 父子组件之间的通信
- 1、父子组件之间的通信的3种方式
- 2、事件绑定
- 3、behaviors
插槽
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种方式
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中所有可用的节点
- 同名字段的覆盖和组合规则
组件和它引用的 behavior
中可以包含同名的字段,对这些字段的处理方法如下:
- 如果有同名的属性 (properties) 或方法 (methods):
- 若组件本身有这个属性或方法,则组件的属性或方法会覆盖
behavior
中的同名属性或方法; - 若组件本身无这个属性或方法,则在组件的
behaviors
字段中定义靠后的behavior
的属性或方法会覆盖靠前的同名属性或方法; - 在 2 的基础上,若存在嵌套引用
behavior
的情况,则规则为:引用者 behavior
覆盖被引用的 behavior
中的同名属性或方法。
- 若组件本身有这个属性或方法,则组件的属性或方法会覆盖
- 如果有同名的数据字段 (data):
- 若同名的数据字段都是对象类型,会进行对象合并;
- 其余情况会进行数据覆盖,覆盖规则为:
引用者 behavior
>被引用的 behavior
、靠后的 behavior
>靠前的 behavior
。(优先级高的覆盖优先级低的,最大的为优先级最高)
- 生命周期函数和 observers 不会相互覆盖,而是在对应触发时机被逐个调用:
- 对于不同的生命周期函数之间,遵循组件生命周期函数的执行顺序;
- 对于同种生命周期函数和同字段 observers ,遵循如下规则:
behavior
优先于组件执行;被引用的 behavior
优先于引用者 behavior
执行;靠前的 behavior
优先于靠后的 behavior
执行;
- 如果同一个
behavior
被一个组件多次引用,它定义的生命周期函数和 observers 不会重复执行
99%的人还看了
相似问题
- Tekton — 通过tekton-operator部署tekton组件
- vue3中使用全局自定义指令和组件自定义指令
- HarmonyOS ArkTS 基础组件的使用(四)
- 界面控件DevExpress WPF流程图组件,完美复制Visio UI!(一)
- Vue2系列 -- 组件自动化全局注册(require.context)
- 扩散模型实战(十一):剖析Stable Diffusion Pipeline各个组件
- django DRF认证组件示例
- MySQL内部组件与日志详解
- 前端新手Vue3+Vite+Ts+Pinia+Sass项目指北系列文章 —— 第五章 Element-Plus组件库安装和使用
- 修改el-radio-group样式,自定义单选组件
猜你感兴趣
版权申明
本文"【微信小程序】自定义组件(三)":http://eshow365.cn/6-38318-0.html 内容来自互联网,请自行判断内容的正确性。如有侵权请联系我们,立即删除!
- 上一篇: 按键编程 pal库和标准库
- 下一篇: 区块链多链数字钱包开发