苏苏的微信小程序

微信小程序中自定义组件slot的使用

2022-02-20  本文已影响0人  苏苏哇哈哈

1.slot是什么?

组件模板的写法与页面模板相同。组件模板与组件数据结合后生成的节点树,将被插入到组件的引用位置上。在组件模板中可以提供一个 slot 节点,用于承载组件引用时提供的子节点。

2.如何使用

首先定义一个组件:


在这里插入图片描述

在wxml中定义组件的内容:

<view class="wrapper">
  <view>苏苏苏</view>
  <slot></slot>
</view>

在页面中引入该组件:

在模板中引用到的自定义组件及其对应的节点名需要在 json 文件中显式定义,否则会被当作一个无意义的节点。除此以外,节点名也可以被声明为抽象节点。

{
  "usingComponents": {
    "slot": "../components/slot/inex"
  },
  "navigationBarTitleText": "slot组件"
}
<slot-com>
  苏苏就是小苏苏将插入到组件的slot位置
</slot-com>

显示页面:


在这里插入图片描述

3.模板数据绑定

与普通的 WXML 模板类似,可以使用数据绑定,这样就可以向子组件的属性传递动态数据。
组件中定义两个变量:

/**
 * 组件的属性列表
  */
 properties: {
   propA: {
     type: String,
   },
   propB: {
     type: String,
   }
 },

组件使用数据:

<view class="wrapper">
  <view>苏苏苏 {{propA}}-{{propB}}</view>
  <slot></slot>
</view>

页面中传递参数:

<slot-com prop-a="{{dataFieldA}}" prop-b="{{dataFieldB}}">
  苏苏就是小苏苏将插入到组件的slot位置
</slot-com>
  data: {
    dataFieldA: '苏苏1',
    dataFieldB: '苏苏2',
  },

组件的属性 propA 和 propB 将收到页面传递的数据。页面可以通过 setData 来改变绑定的数据字段。
注意:这样的数据绑定只能传递 JSON 兼容数据。自基础库版本 2.0.9 开始,还可以在数据中包含函数(但这些函数不能在 WXML 中直接调用,只能传递给子组件)。

在这里插入图片描述

4.使用多个slot

默认情况下,一个组件的 wxml 中只能有一个 slot 。需要使用多 slot 时,可以在组件 js 中声明启用

Component({
  options: {
    multipleSlots: true // 在组件定义时的选项中启用多slot支持
  },
  properties: { /* ... */ },
  methods: { /* ... */ }
})

可以在这个组件的 wxml 中使用多个 slot ,以不同的 name 来区分。

<view class="wrapper">
  <slot name="before"></slot>
  <view>苏苏苏,{{propA}}-{{propB}}</view>
  <slot name="after"></slot>
</view>

页面中使用:使用时,用 slot 属性来将节点插入到不同的 slot 上。

<slot-com prop-a="{{dataFieldA}}" prop-b="{{dataFieldB}}">
  <view slot="before">苏苏就是小苏苏将显示在 name="before"中的内容</view>
  <view slot="after">苏苏就是小苏苏将显示在 name="after"中的内容</view>
</slot-com>
在这里插入图片描述

5.组件样式

组件对应 wxss 文件的样式,只对组件wxml内的节点生效。编写组件样式时,需要注意以下几点:

#a { } /* 在组件中不能使用 */
[a] { } /* 在组件中不能使用 */
button { } /* 在组件中不能使用 */
.a > .b { } /* 除非 .a 是 view 组件节点,否则不一定会生效 */

除此以外,组件可以指定它所在节点的默认样式,使用 :host 选择器(需要包含基础库 1.7.2 或更高版本的开发者工具支持)
在组件中使用改样式,改变字体颜色,(组件中未声明其他字体颜色时候生效)

:host {
  color: pink!important;
}
在这里插入图片描述

6.组件样式隔离

详解,官方文档
默认情况下,自定义组件的样式只受到自定义组件 wxss 的影响。除非以下两种情况:

Component({
  options: {
    styleIsolation: 'isolated'
  }
})
在这里插入图片描述

7.更多小程序资讯,关注公众号‘苏苏的bug’,源码来自‘苏苏的码云’,如果对你有一点帮助,欢迎star+订阅!

上一篇下一篇

猜你喜欢

热点阅读