插槽的使用

当我们想定义一个高度复用的组件,当你使用的时候可以往组件内插入不同的内容,这种情况需要使用插槽。
1.默认插槽

定义的组件
<template>
  <div>
    <header>头部</header>
    <main>
      <!-- 会接收使用组件插入的内容 slot就是插槽-->
        <slot></slot>
    </main>
    <footer>底部</footer>
  </div>
</template>
<script>
export default {
  name: 'com-test'
}
</script>

使用组件
<com-test>内容1</com-test>(内容1的东西会显示在slot标签内)

2.具名插槽
拥有name属性的插槽,使用场景:当 多处内容需要插入的时候。

定义组件:
<template>
  <div>
    <header>头部</header>
    <main>
      <!-- 插入内容 -->
        <slot name="main"></slot>
    </main>
    <footer>
      <!-- 插入底部 -->
      <slot name="footer"></slot>
    </footer>
  </div>
</template>
<script>
export default {
  name: 'com-test'
}
</script>
使用组件:
<com-test>
  <!-- 准备一个容器  装载需要插入的结构  指定插入到那个插槽 -->  
    <div slot="main"> 内容 </div>
  <div slot="footer"> 底部 </div>
</com-test>

3.作用域插槽
在插槽上绑定了数据,然后就可以在该插槽的插入内容中使用

封装组件:
<template>
  <div class='container-test'>
    <slot name="up" age="18" gender="女" :msg="msg"></slot>
    <h4>测试组件</h4>
    <slot name="down"></slot>
  </div>
</template>

<script>
export default {
  name: 'my-test',
  data () {
    return {
      msg: '组件内数据'
    }
  }
}
</script>
使用组件:
import MyTest from '@/components/my-test'
export default {
  // {MyTest:MyTest} 组件名称:组件配置对象
  // 按照规范:遵循驼峰命名,使用组件 小写 + - 方式
  components: { MyTest },
  }
      <my-test>
      <!-- slot="up" 指定插槽名称 -->
      <!-- slot-scope 指定插槽作用域数据(绑定在slot标签上的所有数据)名称 -->
      <!-- data 是变量名,规范变量名:scope 作用域插槽数据 -->
      <div slot="up" slot-scope="scope">上面内容 {{scope.age}}{{scope.gender}}{{scope.msg}}</div>
      <div slot="down">下面内容</div>
    </my-test>

补充:
在vue.js的2.6.0之后,以上写法 slot slot-scope 已经废弃,但是并没有移除,推荐了新的写法。建议使用v-slot 指令(只能在template标签或者组件中使用)来代替。

  <!-- v-slot:插槽名称="作用域插槽数据名称"  固定格式 -->
      <!-- v-slot can only be used on components or <template>. 只能在组件或template中使用 -->
      <template v-slot:up="scope">
        上面内容 {{scope.age}}{{scope.gender}}{{scope.msg}}
      </template>
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。