Vue slot: 具名插槽

tags: Vuejs

具名插槽 ✐

若是需要多个插槽,可以在 <slot> 中使用 name attribute,定义命名的插槽,可以定义具有多个插槽的组件。

Vue.component('my-component', {
  data() {
    return {
      user: {
        name: 'Tony',
        age: 23,
      },
    }
  },
  template: `
  <div>
      <h2><slot name="title"></slot></h2>
      <p><slot name="text"></slot></p>
  </div>`,
})

接着,父组件向命名插槽提供内容,透过 <template>v-slot 指令即可,v-slot 後要加上要提供分发内容的插槽名称。

  • 注意:v-slot 只能使用在 template 上。(有一种例外,後文提及)
const vm = new Vue({
  el: '#app',
  template: `
  <div id="app">
    <my-component>
      <template v-slot:title>标题</template>
      <template v-slot:text>一段文字</template>
    </my-component>
  </div>`,
})

会渲染成如下结果:

默认下,一个没有命名的插槽会预设为具有 default 隐含名称的插槽。

而没有使用 v-slot 指定分发名称的内容会被视作 default 隐含默认插槽的内容:

下方的 <p>这是默认插槽的内容</p> 没有指定分发的命名插槽,将会被视作 default 插槽的内容:

Vue.component('my-component', {
  data() {
    return {
      user: {
        name: 'Tony',
        age: 23,
      },
    }
  },
  template: `
  <div>
      <h2><slot name="title"></slot></h2>
      <p><slot name="text"></slot></p>
      <slot></slot>
  </div>`,
})

const vm = new Vue({
  el: '#app',
  template: `
  <div id="app">
    <my-component>
      <template v-slot:title>标题</template>
      <template v-slot:text>一段文字</template>
      <p>这是默认插槽的内容</p>
    </my-component>
  </div>`,
})

会渲染成如下结果:

以上为此次内容,感谢看到这里的你,我们明天见。


若是文中有任何错误、错字、想讨论的内容,欢迎各位大大不吝鞭笞指正、交流分享,笔者不慎感激 ✦ ✦ ✦

▶︎ 笔者 github:https://github.com/YUN-RU-TSENG
▶︎ 老王卖瓜之笔者另一篇铁人:每天来点 CSS Specification

▶︎ 倘若不断向深处扎根,似乎就能茁壮成长 - RM


参考资料:

  1. Vuejs.org 2.x

<<:  铁人赛Day29-第九章:动画5.1-天气与湾熊1

>>:  DAY28 - 使用 Istio 的 Grafana 可视化後端的流量

YC SUS Group Session

Group Session 是 YC Startup School 其中一项活动,只要每周都有着实填...

Day7-网站阅读进度条(下)_卷轴包卷轴

今天继续说第二种方法 第二种方法就是卷轴拉杆的概念了 就像昨天说的,如果直接用做卷轴时的scale去...

安装测试 WinSyslog for windows 7/10

LogAnalyzer 有一个 Windows 版的 有分 Free 和几个点的版本 Free 的功...

【25】ReLU 家族评比 个别使用ReLU LeakyReLU PReLU SELU 来训练

Colab连结 今天要来实验不同的 ReLU 家族的评比,挑战者有 基本 ReLU 尾巴翘起来的 L...

PM职称百百种,工作内容样样有

到底 PM 在做什麽? 以前还没有开始当产品经理前,因为对这个职位很有兴趣希望能够往这个职涯发展,...