Skip to content

slot插槽新旧语法

如果引用的组件没有使用插槽,那么组件标签中的内容都会【被舍弃】


Vue2.6新语法(统一)

在 Vue2.6.0 中,具名插槽和作用域插槽引入新的统一的语法 ( v-slot 指令)。它同时取代了 slot 和 slot-scope,这两个目前已被废弃但未被移除。

注意

具名插槽与作用域插槽的新版语法不能与旧版语法混用,否则直接全局报错。

区别如下

【定义插槽无新版与旧版差别】

js
// 定义SlotTest.vue
<template>
  <div>
    <p>===========插槽测试===========</p>
    <slot name="testName" :TestData="TestData">插槽默认内容</slot>
  </div>
</template>
...
data() {
  return {
      TestData: {name: 'chaos'}
  }
}

旧版语法

使用slot指定name,slot-scope接收插槽暴露的prop

js

<SlotTest>
    <span slot="test" slot-scope="suibian">SlotTestContent: {{suibian}}</span>
</SlotTest>

新版语法

v-slot可以只指定插槽的名称。如果需要,也可以同时接收props。v-slot只能写在组件名称或者template上

WARNING

Vue3只支持新版语法,旧版本语法只能在Vue2中使用

js

<!-- 新版插槽写法:v-slot:SlotName="SlotProps" -->
<SlotTest>
    // v-slot 只能用在template或组件上
    <template v-slot:testName="TestData">SlotTestContent: {{TestData}}</template>
</SlotTest> 

// 或者【不推荐写法,如果有默认插槽就不好写了,记住上面的就好了】
<SlotTest v-slot:test="data123">SlotTestContent: {{data123}} </SlotTest> 

// 缩写语法 # 参考:https://cn.vuejs.org/v2/guide/components-slots.html#%E5%85%B7%E5%90%8D%E6%8F%92%E6%A7%BD%E7%9A%84%E7%BC%A9%E5%86%99
<SlotTest #test="data123">SlotTestContent: {{data123}} </SlotTest>

参考文章:https://blog.csdn.net/qq_36337754/article/details/103906567