微信小程序slot插槽功能
在我们封装组件的时候,有些时候,我们需要使用类似于vue中的slot插槽;
小程序借鉴了这个优秀的想法;
在小程序中,组件模板中可以提供一个 <slot> 节点,用于承载组件引用时提供的子节点。
组件
<view class="cont">
<view>
我是组件
</view>
<slot></slot>
</view>
页面使用
xxx.json 引入注册组件
{
"usingComponents": {
"listview":"/components/listview/list"
}
}
<listview>
<view>
我是插入的第一条数据
</view>
<view>我是插进入的第二天数据
</view>
</listview>
在组件的 wxml 中可以包含 slot 节点,用于承载组件使用者提供的 wxml 结构。
默认情况下,一个组件的 wxml 中只能有一个 slot 。需要使用多 slot 时,可以在组件 js 中声明启用。
ps:组件对应 wxss 文件的样式,只对组件wxml内的节点生效。编写组件样式时,需要注意以下几点:
1==>组件和引用组件的页面不能使用id选择器(#a)、属性选择器([a])和标签名选择器,请改用class选择器。(注意)
2==> 组件件和引用组件的页面中使用后代选择器(.a .b)在一些极端情况下会有非预期的表现,如遇,请避免使用。
3==>子元素选择器(.a>.b)只能用于 view 组件与其子节点之间,用于其他组件可能导致非预期的情况。
4==>继承样式,如 font 、 color ,会从组件外继承到组件内。(重点)
5==>除继承样式外, app.wxss 中的样式、组件所在页面的的样式对自定义组件无效(除非更改组件样式隔离选项)。
什么是组件样似隔离选项
默认情况下,自定义组件的样式只受到自定义组件 wxss 的影响。除非以下两种情况:
(1)app.wxss 或页面的 wxss 中使用了标签名选择器(或一些其他特殊选择器)来直接指定样式,
这些选择器会影响到页面和全部组件。通常情况下这是不推荐的做法。
比如说你在app.wxss中定义了
view{color:red};
你使用了标签选择器,那么页面以及所有组件
字体颜色是红色哈~;
(2) 指定特殊的样式隔离选项 styleIsolation
isolated 表示启用样式隔离,在自定义组件内外,使用 class 指定的样式将不会相互影响(一般情况下的默认值);
apply-shared 表示页面 wxss 样式将影响到自定义组件,但自定义组件 wxss 中指定的样式不会影响页面;
shared 表示页面 wxss 样式将影响到自定义组件,自定义组件 wxss 中指定的样式也会影响页面和其他设置了 apply-shared 或 shared 的自定义组件。(这个选项在插件中不可用。)
Component({
options: {
styleIsolation: 'isolated'
}
})
组件
组件.js中
Component({
options: {
multipleSlots: true // 在组件定义时的选项中启用多slot支持
},
properties: { /* ... */ },
methods: { /* ... */ }
})
<view class="cont">
<slot name="before"></slot>
<view>这里是组件的内部细节</view>
<slot name="after"></slot>
</view>
父页面使用
<listview>
<!-- 这部分内容将被放置在组件 <slot name="before"> 的位置上 -->
<view slot="before">这里是插入到组件"before"</view>
<!-- 这部分内容将被放置在组件 <slot name="after"> 的位置上 -->
<view slot="after">这里是插入到组件"after"的内容</view>
</listview>
如果您的问题还未解决可以联系站长付费协助。
有问题可以加入技术QQ群一起交流学习
本站vip会员 请加入无忧模板网 VIP群(50604020) PS:加入时备注用户名或昵称
普通注册会员或访客 请加入无忧模板网 技术交流群(50604130)
客服微信号:15898888535
声明:本站所有文章资源内容,如无特殊说明或标注,均为采集网络资源。如若内容侵犯了原著者的合法权益,可联系站长删除。