前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >【愚公系列】2022年02月 微信小程序-组件模板和组件样式

【愚公系列】2022年02月 微信小程序-组件模板和组件样式

作者头像
愚公搬代码
发布2022-02-28 10:01:10
3180
发布2022-02-28 10:01:10
举报
文章被收录于专栏:历史专栏历史专栏

文章目录

一、组件模板

组件模板的写法与页面模板相同。组件模板与组件数据结合后生成的节点树,将被插入到组件的引用位置上。

在组件模板中可以提供一个 节点,用于承载组件引用时提供的子节点。

1.无命名插槽

代码语言:javascript
复制
<!-- 组件模板 -->
<view class="wrapper">
  <view>这里是组件的内部节点</view>
  <slot></slot>
</view>
代码语言:javascript
复制
<!-- 引用组件的页面模板 -->
<view>
  <component-tag-name>
    <!-- 这部分内容将被放置在组件 <slot> 的位置上 -->
    <view>这里是插入到组件slot中的内容</view>
  </component-tag-name>
</view>

2.命名插槽

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

代码语言:javascript
复制
Component({
  options: {
    multipleSlots: true // 在组件定义时的选项中启用多slot支持
  },
  properties: { /* ... */ },
  methods: { /* ... */ }
})
代码语言:javascript
复制
<!-- 组件模板 -->
<view class="wrapper">
  <slot name="before"></slot>
  <view>这里是组件的内部细节</view>
  <slot name="after"></slot>
</view>
代码语言:javascript
复制
<!-- 引用组件的页面模板 -->
<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>

二、组件样式

1.禁用写法

组件对应 wxss 文件的样式,只对组件wxml内的节点生效。以下写法是不生效的

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

2.组件样式隔离

默认情况下,自定义组件的样式只受到自定义组件 wxss 的影响。但也有些特殊写法会影响到组件样式就必须隔离

代码语言:javascript
复制
Component({
  options: {
    addGlobalClass: true,
    styleIsolation: 'isolated'
  }
})

3.外部样式

有时,组件希望接受外部传入的样式类。此时可以在 Component 中用 externalClasses 定义段定义若干个外部样式类。

代码语言:javascript
复制
/* 组件 custom-component.js */
Component({
  externalClasses: ['my-class']
})
代码语言:javascript
复制
<!-- 组件 custom-component.wxml -->
<custom-component class="my-class">这段文本的颜色由组件外的 class 决定</custom-component>

4.页面样式引用

即使启用了样式隔离 isolated ,组件仍然可以在局部引用组件所在页面的样式或父组件的样式。

代码语言:javascript
复制
.blue-text {
  color: blue;
}
代码语言:javascript
复制
<view class="~blue-text"> 这段文本是蓝色的 </view>

5.父组件样式引用

代码语言:javascript
复制
.red-text {
  color: red;
}
代码语言:javascript
复制
<view class="^red-text"> 这段文本是红色的 </view>

6.虚拟化组件节点

自定义组件并不希望这个节点本身可以设置样式、响应 flex 布局等,而是希望自定义组件内部的第一层节点能够响应 flex 布局或者样式由自定义组件本身完全决定。

这种情况下,可以将这个自定义组件设置为“虚拟的”:

代码语言:javascript
复制
Component({
  options: {
    virtualHost: true
  },
  properties: {
    style: { // 定义 style 属性可以拿到 style 属性上设置的值
      type: String,
    }
  },
  externalClasses: ['class'], // 可以将 class 设为 externalClasses
})
代码语言:javascript
复制
<!-- 页面的 WXML -->
<view style="display: flex">
  <!-- 如果设置了 virtualHost ,节点上的样式将失效 -->
  <custom-component style="color: blue">不是蓝色的</custom-component>
</view>
本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2022-02-28 ,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 文章目录
  • 一、组件模板
    • 1.无命名插槽
      • 2.命名插槽
      • 二、组件样式
        • 1.禁用写法
          • 2.组件样式隔离
            • 3.外部样式
              • 4.页面样式引用
                • 5.父组件样式引用
                  • 6.虚拟化组件节点
                  领券
                  问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档