笔记-插槽

52 阅读1分钟

一. 插槽

组件

<button type="submit">  
    <slot></slot>  
</button>

1. 插槽作用域

父级模板里的所有内容都是在父级作用域中编译的;子模板里的所有内容都是在子作用域中编译的。

子组件的插槽不能访问子组件中的变量.

2.作用域插槽

由于插槽是在当前的父组件渲染的, 为了让插槽访问到子组件的变量, 可以将 user 作为 <slot> 元素的一个 attribute 绑定上去

子组件:

<span>  
   <slot v-bind:user="user"></slot>  
</span>

3. 具名插槽

有时我们需要多个插槽, 给每个插槽取一个名字

子组件html

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

父组件html:

现在 <template> 元素中的所有内容都将会被传入相应的插槽。任何没有被包裹在带有 v-slot 的 <template> 中的内容都会被视为默认插槽的内容。

<base-layout>  
  <template v-slot:header>  
    <h1>Here might be a page title</h1>  
  </template>  
  
  <p>A paragraph for the main content.</p>  
  <p>And another one.</p>  
  
  <template v-slot:footer>  
    <p>Here's some contact info</p>  
  </template>  
</base-layout>

具名插槽缩写

参数之前的所有内容 (v-slot:) 替换为字符 #, 例如 v-slot:header 可以被重写为 #header.