如何优雅的解决小程序组件(component)的插槽(slot)没有默认值的情况?

本文介绍了一种在微信小程序中为插槽设置默认值的优雅解决方案,利用CSS的`:empty`伪类,当插槽未传入值时显示默认内容。通过这种方式,避免了使用额外的变量控制默认标签的显示,简化了代码并提高了组件的灵活性。
摘要由CSDN通过智能技术生成

有关插槽-想给插槽增加默认值的优雅解决方式

在使用小程序组件的slot插槽的时候,我们发现这个插槽是不能给默认值的。并不像vue和react那么好用。原因是我们不能给插槽提供默认值,在使用组件的时候传值就不显示默认值。

最简单的方式当然是使用一个布尔类型的变量,通过wx:ifwx:else来控制是显示插槽的值,还是显示组件内部的默认值。

很明显,这个方式不优雅,不是我们大多数人所希望的。

事实上,还是有一种方式可以优雅的解决这个问题。需要利用css的一些特性。

我们可以使用一个empty伪类来解决。

image-20220104162236938

<view class="header">
    <!-- 标题  -->
    <view class="title">{{title}}</view>
    <view class="slot">
        <slot></slot>
    </view>
    <!-- 插槽不传递值的时候,则作为默认值显示 默认情况下 我们不让其显示 -->
    <view class="right">
        <text class="right-title">{{rightText}}</text>
        <!-- 图标 -->
        <image class="icon" src="../common/images/icon/arrow-right.png"/>
    </view>
</view>

样式采用的是less进行书写

/* components/area-header/index.wxss */
.header {
  height: 80rpx;
  width: 100%;
  display: flex;
  flex-direction: row;
  justify-content: space-between;
  align-items: center;

  .title {
    color: #000;
    font-weight: bold;
    font-size: 34rpx;
  }

  // 默认插槽是否显示 如果默认插槽组件内是空的,也就是没有传组件,此时<slot/>
  // 标签在渲染的时候,会消失,则slot标签的父容器此时为空
  .slot:empty + .right {
    // 插槽是空 则显示默认插槽
    display: block;
  }

  .right {
    // 默认情况 我们认为插槽会传值 则不显示
    display: none;

    .right-title {
      font-size: 28rpx;
      color: #bbb;
      line-height: 80rpx;
      text-align: center;
    }

    .icon {
      // 图片 文字对齐方式
      vertical-align: middle;
      height: 48rpx;
      width: 48rpx;
    }
  }
}

如果我们没有给插槽传值,则会显示下面类名为right的标签:

image-20220104162236938

如果我们在使用组件的时候,给插槽传值了,则会显示我们传入的值:

image-20220104162628330

image-20220104162635898

可以解决多使用变量,在给插槽传值的时候,还需要使用变量控制默认标签是否显示的问题。

  • 13
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 5
    评论
评论 5
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

尤雨东

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值