熟悉具名插槽和作用域插槽

为什么用插槽?

使得我们的组件具有扩展性,由使用者决定组件内部展示的内容。将不同的地方定义为插槽暴露出去,根据使用的场景需求决定内容。

具名插槽?

有时候我们在一个组件需要用到多个插槽,用命名name="footer"的方式给每个插槽取名,可以区分它们。

作用域插槽?

在子组件中动态绑定需要传入的数据,在父组件传入数据给子组件。

示例

父组件
<template>
  <div>
    <SlotDemo :title="title">
      具名:在指定的位置输出我们的子元素,如下面的尾部元素插槽。
      <br />作用域:主要作用是在书写插槽内容时可以获取到插槽作用域(父组件传不同的值给子组件)的值,例如对话框的标题。
      <br />
      <template #footer>
        <el-button size="mini" type="primary" style="margin-right:5px">编辑</el-button>
        <el-button size="mini" type="error">删除</el-button>
      </template>
    </SlotDemo>
  </div>
</template>

<script>
import SlotDemo from '../../components/slot-demo.vue'
export default {
  name: 'Home',
  components: {
    SlotDemo
  },
  data() {
    return {
      title: '熟悉具名插槽和作用域插槽'
    }
  }
}
</script>

<style></style>
子组件
<template>
  <div class="wrapper">
    <div class="dialog">
      <div class="header center">
        <slot name="header">
          <span>
            <strong>{{ title }}</strong>
          </span>
          <i class="el-icon-close" @click="close"></i>
        </slot>
      </div>
      <div class="body">
        <slot>请输入正文</slot>
      </div>
      <div class="footer">
        <slot name="footer" v-if="$slots.footer">我是尾部元素</slot>
      </div>
      <div class="clear"></div>
    </div>
  </div>
</template>

<script>
export default {
  name: 'slot-demo',
  props: {
    title: {
      type: String,
      default: ''
    },
  }
}
</script>

<style scoped lang="scss">
.wrapper {
  color: #333;
  width: 1280px;
  margin: 0 auto;
  background-color: aquamarine;
  .dialog {
    padding: 10px;
    .header {
      position: relative;
      i {
        cursor: pointer;
        position: absolute;
        top: 5px;
        right: 10px;
      }
    }
    .body {
      height: 100px;
    }
    .footer {
      float: right;
      height: 30px;
    }
    .clear {
      clear: both;
    }
  }
}
.center {
  display: flex;
  align-items: center;
  justify-content: center;
}
</style>

图示

在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

茶茶呀

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

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

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

打赏作者

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

抵扣说明:

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

余额充值