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

1.单个插槽 | 匿名插槽

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

  1. <a v-bind:href="url" class="nav-link">
  2. <slot></slot>
  3. </a>

1.2父组件像以下这样使用<navigation-link>子组件:

  1. <navigation-link url="/profile">
  2. Your Profile
  3. </navigation-link>

1.3渲染出来的 HTML 将会是:

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

2.具名插槽

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

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

  1. <div class="container">
  2. <header>
  3. <slot name="header"></slot>
  4. </header>
  5. <main>
  6. <slot></slot>
  7. </main>
  8. <footer>
  9. <slot name="footer"></slot>
  10. </footer>
  11. </div>

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

  1. <base-layout>
  2. <h1 slot="header">Here might be a page title</h1>
  3.  
  4. <p>A paragraph for the main content.</p>
  5. <p>And another one.</p>
  6.  
  7. <p slot="footer">Here's some contact info</p>
  8. </base-layout>

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

  1. <base-layout>
  2. <template slot="header">
  3. <h1>Here might be a page title</h1>
  4. </template>
  5.  
  6. <p>A paragraph for the main content.</p>
  7. <p>And another one.</p>
  8.  
  9. <template slot="footer">
  10. <p>Here's some contact info</p>
  11. </template>
  12. </base-layout>

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

  1. <div class="container">
  2. <header>
  3. <h1>Here might be a page title</h1>
  4. </header>
  5. <main>
  6. <p>A paragraph for the main content.</p>
  7. <p>And another one.</p>
  8. </main>
  9. <footer>
  10. <p>Here's some contact info</p>
  11. </footer>
  12. </div>

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

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

3.1子组件:

  1. <template>
  2. <div class="child">
  3.  
  4. <h3>这里是子组件</h3>
  5. // 作用域插槽
  6. <slot :data="data"></slot>
  7. </div>
  8. </template>
  9.  
  10. export default {
  11. data: function(){
  12. return {
  13. data: ['zhangsan','lisi','wanwu','zhaoliu','tianqi','xiaoba']
  14. }
  15. }
  16. }

3.2父组件:

  1. <template>
  2. <div class="father">
  3. <h3>这里是父组件</h3>
  4. <!--第一次使用:用flex展示数据-->
  5. <child>
  6. <template slot-scope="user">
  7. <div class="tmpl">
  8. <span v-for="item in user.data">{{item}}</span>
  9. </div>
  10. </template>
  11.  
  12. </child>
  13.  
  14. <!--第二次使用:用列表展示数据-->
  15. <child>
  16. <template slot-scope="user">
  17. <ul>
  18. <li v-for="item in user.data">{{item}}</li>
  19. </ul>
  20. </template>
  21.  
  22. </child>
  23.  
  24. <!--第三次使用:直接显示数据-->
  25. <child>
  26. <template slot-scope="user">
  27. {{user.data}}
  28. </template>
  29.  
  30. </child>
  31.  
  32. <!--第四次使用:不使用其提供的数据, 作用域插槽退变成匿名插槽-->
  33. <child>
  34. 我就是模板
  35. </child>
  36. </div>
  37. </template>

3.3结果如图:

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

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

[Vue]组件——插槽:slot(匿名插槽,具名插槽)与slot-scope(作用域插槽)的更多相关文章

  1. Vue组件-使用插槽分发内容

    在使用组件时,我们常常要像这样组合它们: <app> <app-header></app-header> <app-footer></app-fo ...

  2. Vue基础-作用域插槽-列表组件

    Vue 测试版本:Vue.js v2.5.13 Vue 官网介绍作用域插槽时, 在 2.5.0+,slot-scope 能被用在任意元素或组件中而不再局限于 <template>. 作用域 ...

  3. Vue 组件3 作用域插槽

    作用域插槽是一种特殊类型的插槽,用作使用一个(能够传递数据到)可重用模板替换已渲染元素. 在子组件中,只需将数据传递到插槽,就像你将props传递给组件一样: <div class=" ...

  4. Vue.js 源码分析(二十六) 高级应用 作用域插槽 详解

    普通的插槽里面的数据是在父组件里定义的,而作用域插槽里的数据是在子组件定义的. 有时候作用域插槽很有用,比如使用Element-ui表格自定义模板时就用到了作用域插槽,Element-ui定义了每个单 ...

  5. 新版vue作用域插槽的使用

    2.6开始,作用域插槽的使用有了不同的地方: 作用域插槽的个人理解就是让子组件的数据可以在父组件中使用:  也是一个数据传递的方式了: 不多说,上代码 子组件定义一个插槽,并且定义一个需要传递到父组件 ...

  6. vue组件-使用插槽分发内容(slot)

    slot--使用插槽分发内容(位置.槽口:作用: 占个位置) 官网API: https://cn.vuejs.org/v2/guide/components.html#使用插槽分发内容 使用组件时,有 ...

  7. 三、深入Vue组件——Vue插槽slot、动态组件

    一.插槽slot() 1.1简单插槽slot [功能]用于从父组件中,通过子组件写成双标签,向子组件中放入自定的内容 parent.vue [1]首先把child写成双标签样式,把要插入的内容放双标签 ...

  8. 8.Vue组件三---slot插槽

    主要内容:  1. 什么是插槽 2. 组件的插槽 3. 插槽的使用方法 4. 插槽的具名 5. 变量的作用域 6. slot的作用域 一. 什么是插槽呢? 1. 生活中的插槽有哪些呢? usb插槽, ...

  9. vue组件---插槽

    (1)插槽内容 Vue 实现了一套内容分发的 API,这套 API 的设计灵感源自 Web Components 规范草案,将 <slot> 元素作为承载分发内容的出口. 在父级组件里可以 ...

随机推荐

  1. spring MVC学习(三)

    1. @RequestMapping: 在请求的路径中传递参数:参数作为路径的一部分,可以在路径中直接使用 {paramName}来表示,另一种就是更加传统的表示方式?paramName=paramV ...

  2. Spark2.0 Pipelines

    MLlib中众多机器学习算法API在单一管道或工作流中更容易相互结合起来使用.管道的思想主要是受到scikit-learn库的启发. ML API使用Spark SQL中的DataFrame作为机器学 ...

  3. PAT 1038 Recover the Smallest Number[dp][难]

    1038 Recover the Smallest Number (30 分) Given a collection of number segments, you are supposed to r ...

  4. mysql基础测试

    mysql基础测试 测试原因   为什么需要做性能测试 模拟比当前系统更高的负载,找出性能瓶颈 重现线上异常 测试不同硬件软件配置 规划未来的业务增长   测试分类   性能测试的分类 设备层的测试 ...

  5. keeplived + mysql双主复制部署 --原创

    环境: master 1: 192.168.100.10  oracle  linux 7.4  mysql 5.7.1 master 2: 192.168.100.11 oracle  linux ...

  6. javascript 中的 parameter vs arguments

    像往常一样简单粗暴地看码: A parameter is the variable which is part of the method’s signature (method declaratio ...

  7. $思维导图——numpy基本知识

  8. motan rpc

    git :  帮助 文档 基本介绍 Motan是一套基于java开发的RPC框架,除了常规的点对点调用外,Motan还提供服务治理功能,包括服务节点的自动发现.摘除.高可用和负载均衡等.Motan具有 ...

  9. fetch body里数据为ReadableStream 解决办法

    前端工程中发送 HTTP 请求从来都不是一件容易的事,前有骇人的 ActiveXObject ,后有 API 设计十分别扭的 XMLHttpRequest ,甚至这些原生 API 的用法至今仍是很多大 ...

  10. PHP秒杀系统全方位设计分析(一)

    秒杀系统特点人多商品少时间短流量高外挂机器[黄牛和非黄牛] 技术分析瞬间高并发的处理能力多层次的分布式处理能力人机交互与对抗[12306验证码图片] 技术选型分析Linux+Nginx+PHP+Mys ...