• vue插槽详解(匿名,具名,作用域)


    v-slot 指令自 Vue 2.6.0 起被引入,提供更好的支持 slot 和 slot-scope 特性的 API 替代方案:https://cn.vuejs.org/v2/guide/components-slots.html

    1.单个插槽 | 匿名插槽

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

    <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 将会是:

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

     

    2.具名插槽

    需要多个插槽时,可以利用<slot> 元素的一个特殊的特性:name来定义具名插槽

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

    复制代码
    <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特性:

    复制代码
    <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特性:

    复制代码
    <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 都将会是:

    复制代码
    <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子组件:

    复制代码
    <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>
    复制代码

    3.3结果如图:

    匿名插槽和具名插槽详情见:https://cn.vuejs.org/v2/guide/components-slots.html#作用域插槽

    作用域插槽详情见:https://segmentfault.com/a/1190000013277423

    关于作用域插槽看完上面还是有点懵的,建议看看这篇文章

    vue作用域插槽,你真的懂了吗?

  • 相关阅读:
    win10企业版激活密钥
    百科知识 手机QQ的视频如何保存
    华为荣耀7手机如何开启开发者模式,开启调试模式
    C#如何设置控件水平对齐,垂直对齐
    C#如何实现挂机锁
    JAVA_MyEclipse常见配置NETGEAR路由器如何设置
    JAVA_MyEclipse如何加载Tomcat
    VC++_错误 无法打开包括文件“glglut.h” No such file or directory 怎么办
    生活娱乐 达尔优的键盘鼠标如何打开和关闭呼吸灯
    新版的豌豆荚如何连接电脑
  • 原文地址:https://www.cnblogs.com/NanKe-Studying/p/14033587.html
Copyright © 2020-2023  润新知