# 组件模板和样式
类似于页面,自定义组件拥有自己的 wxml 模板和 wxss 样式。
# 组件模板
组件模板的写法与页面模板相同。组件模板与组件数据结合后生成的节点树,将被插入到组件的引用位置上。
在组件模板中可以提供一个节点,用于承载组件引用时提供的子节点。
代码示例:
<!-- 组件模板 -->
<view class="wrapper">
<view>这里是组件的内部节点</view>
<slot></slot>
</view>
<!-- 引用组件的页面模板 -->
<view>
<component-tag-name>
<!-- 这部分内容将被放置在组件 <slot> 的位置上 -->
<view>这里是插入到组件slot中的内容</view>
</component-tag-name>
</view>
注意,在模板中引用到的自定义组件及其对应的节点名需要在 json 文件中显式定义,否则会被当作一个无意义的节点。
# 模板数据绑定
与普通的 WXML 模板类似,可以使用数据绑定,这样就可以向子组件的属性传递动态数据。
代码示例:
<!-- 引用组件的页面模板 -->
<view>
<component-tag-name prop-a="{{dataFieldA}}" prop-b="{{dataFieldB}}">
<!-- 这部分内容将被放置在组件 <slot> 的位置上 -->
<view>这里是插入到组件slot中的内容</view>
</component-tag-name>
</view>
在以上例子中,组件的属性 propA 和 propB 将收到页面传递的数据。页面可以通过 setData 来改变绑定的数据字段。
注意:这样的数据绑定只能传递 JSON 兼容数据。
# 组件 wxml 的 slot
在组件的 wxml 中可以包含 slot 节点,用于承载组件使用者提供的 wxml 结构。(支持使用多 slot)
可以在这个组件的 wxml 中使用多个 slot ,以不同的 name 来区分。
<!-- 组件模板 -->
<view class="wrapper">
<slot name="before"></slot>
<view>这里是组件的内部细节</view>
<slot name="after"></slot>
</view>
使用时,用 slot 属性来将节点插入到不同的 slot 上。
<!-- 引用组件的页面模板 -->
<view>
<component-tag-name>
<!-- 这部分内容将被放置在组件 <slot name="before"> 的位置上 -->
<view slot="before">这里是插入到组件slot name="before"中的内容</view>
<!-- 这部分内容将被放置在组件 <slot name="after"> 的位置上 -->
<view slot="after">这里是插入到组件slot name="after"中的内容</view>
</component-tag-name>
</view>
# 组件样式
组件对应 wxss 文件的样式,目前页面使用的样式会影响到组件的内部样式,同级组件样式也相互干扰。(暂时建议使用组件时,用手动作用域样式来做区分)。例如:
<!-- comp.wxml -->
<view class="comp">
<view class="comp-title">我是组件1本身内容</view>
</view>
<!-- comp2.wxml -->
<view class="comp2">
<view class="comp2-title">我是组件2本身内容</view>
</view>
// comp.wxss
.comp {
background-color: red;
}
.comp-title {
color: red;
}
// comp2.wxss
.comp2 {
background-color: green;
}
.comp2-title {
color: green;
}