vue slot插槽详解

插槽就是子组件中提供给父组件使用的一个占位符,用 表示,父组件可以在这个占位符中填充任何模板代码,如 HTML、组件等,填充的内容会替换子组件的标签。
插槽的目的在于使组件更具有扩展性,如何封装一个好的组件?就是将共性抽取到组件中,将不同暴露为插槽。一旦我们预留了插槽,就可以让使用者根据自己的需求,决定插槽中插入什么内容。

一、插槽基本使用

// 父组件 test.vue 内容
    <test-child>
      {{data.user}}  // 替换  里面的内容
    </test-child>

// 子组件 testChild.vue 内容
    <template>
       <div>
          <slot></slot>  // 此插槽 name 默认为 default
          //  也可以给一个后备内容 
       </div>
    </template>

注意: 如果 的 template 中没有包含一个 元素,则该组件起始标签和结束标签之间的任何内容都会被抛弃

二、具名插槽

v-slot 自 2.6.0 起有所更新。已废弃的使用 slot attribute 和 slot-scope attribute 的语法看下文第四节。

(1)基本使用

// 父组件 test.vue 内容
    <test-child>
      <template v-slot:header>  // v-slot:header 可以简写为: #header
         我是header插槽
      </template>
      
      <div>一个不带 name 的 <slot> 出口会带有隐含的名字“default”。</div>
      <p>我也属于 <slot></slot> 默认插槽内容</p>
      
      <template v-slot:footer>
         我是footer插槽
      </template>
    </test-child>

// 子组件 testChild.vue 内容
    <template>
       <header>
          <slot name="header"></slot>
       </header>
       
       <slot></slot>
          
       <footer>
          <slot name="footer"></slot>
       </footer>
    </template>

注意:v-slot 只能添加在