Vue 教程(14)—— 插槽

1 插槽内容

Vue 实现了一套内容分发的 API,这套 API 基于当前的 Web Components 规范草案,将  元素作为承载分发内容的出口。

它允许你像这样合成组件:

<div id="app1">
    <navigation-link url="/profile">
        Your Profile
    navigation-link>
div>

然后你在 的模板中可能会写为:

Vue.component('navigation-link', {
        template: `
            <a
                v-bind:href="url"
                class="nav-link"
            >
            <slot>slot>
            a>
        `
    });

当组件渲染的时候,这个 元素将会被替换为“Your Profile”。

插槽内可以包含任何模板代码,包括 HTML:

<navigation-link url="/profile">
  
  <span class="fa fa-user">span>
  Your Profile
navigation-link>

甚至其它的组件:

navigation-link url="/profile">
  
  <font-awesome-icon name="user">font-awesome-icon>
  Your Profile
navigation-link>

如果 没有包含一个 元素,则任何传入它的内容都会被抛弃。

2 具名插槽

有些时候我们需要多个插槽。例如,一个假设的 组件多模板如下:

<div class="container">
  <header>
    
  header>
  <main>
    
  main>
  <footer>
    
  footer>
div>

对于这样的情况, 元素有一个特殊的特性:name。这个特性可以用来定义额外的插槽:

<div class="container">
  <header>
    <slot name="header">slot>
  header>
  <main>
    <slot>slot>
  main>
  <footer>
    <slot name="footer">slot>
  footer>
div>

在向具名插槽提供内容的时候,我们可以在一个父组件的