组件--插槽:匿名插槽 具名插槽

单个插槽|匿名插槽html

1.1  <navigation-link> 子组件定义为:post

<a v-bind:href="url" class="nav-link">
  <slot></slot>
</a>
1.2 父组件向一下这样使用<navigation-link>子组件
<navigation-link url="/profile">
  Your Profile
</navigation-link>

1.3渲染出来的 HTML 将会是:flex

<a v-bind:href="url" class="nav-link">
  Your Profile
</a>

2.具名插槽

须要多个插槽时,能够利用<slot> 元素的一个特殊的特性:name来定义具名插槽url

 

2.1<base-layout>子组件模板定义:spa

复制代码
<div class="container">
  <header>
    <slot name="header"></slot>
  </header>
  <main>
    <slot></slot>
  </main>
  <footer>
    <slot name="footer"></slot>
  </footer>
</div>
复制代码

 

2.2.1父组件使用子组件<base-layout>,节点上使用slot特性:code

复制代码
<base-layout>
  <h1 slot="header">Here might be a page title</h1>

  <p>A paragraph for the main content.</p>
  <p>And another one.</p>

  <p slot="footer">Here's some contact info</p>
</base-layout>
复制代码

 

2.2.2也可在内容外层套一个节点,并在外层节点上使用slot特性:htm

复制代码
<base-layout>
  <template 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 slot="footer">
    <p>Here's some contact info</p>
  </template>
</base-layout>
复制代码

 

2.3渲染出来的 HTML 都将会是:blog

复制代码
<div class="container">
  <header>
    <h1>Here might be a page title</h1>
  </header>
  <main>
    <p>A paragraph for the main content.</p>
    <p>And another one.</p>
  </main>
  <footer>
    <p>Here's some contact info</p>
  </footer>
</div>
复制代码

 

3.做用域插槽——带数据的插槽

单个插槽和具名插槽中插槽上不绑定数据,因此父组件提供的模板既要包括样式又要包括数据,而做用域插槽是子组件提供数据,父组件只须要提供一套样式作用域

3.1子组件:it

复制代码
<template>
  <div class="child">

    <h3>这里是子组件</h3>
    // 做用域插槽
    <slot  :data="data"></slot>
  </div>
</template>

 export default {
    data: function(){
      return {
        data: ['zhangsan','lisi','wanwu','zhaoliu','tianqi','xiaoba']
      }
    }
}
复制代码

 

3.2父组件:

复制代码
<template>
  <div class="father">
    <h3>这里是父组件</h3>
    <!--第一次使用:用flex展现数据-->
    <child>
      <template slot-scope="user">
        <div class="tmpl">
          <span v-for="item in user.data">{{item}}</span>
        </div>
      </template>

    </child>

    <!--第二次使用:用列表展现数据-->
    <child>
      <template slot-scope="user">
        <ul>
          <li v-for="item in user.data">{{item}}</li>
        </ul>
      </template>

    </child>

    <!--第三次使用:直接显示数据-->
    <child>
      <template slot-scope="user">
       {{user.data}}
      </template>

    </child>

    <!--第四次使用:不使用其提供的数据, 做用域插槽退变成匿名插槽-->
    <child>
      我就是模板
    </child>
  </div>
</template>

 

转载于:https://www.cnblogs.com/yangjingyang/p/11390925.html