Vue的内容分发slot的使用

什么是内容分发??

概括:将父组件的内容放到子组件指定的位置

场景:在使用组件时,我们常常需要像这样组合使用


< app>< app-header>< /app-header>< app-footer>< /app-footer>
< /app>
复制代码

此时有两个点需要注意:

  • < app> 组件不确定自己所接收的数据。这是由使用 < app> 的父组件所决定的。
  • < app> 作为一个组件使用,可能有自己的模板。
所以为了让组件可以很好的组合使用,我们需要一种方式来混合父组件的内容与子组件自己的模板。这个过程被称为内容分发,也就是将父组件的内容放到子组件的指定位置。
  1. 先了解一下 '编译作用域' 的概念 : 父组件模板的内容在父组件作用域内编译;子组件模板的内容在子组件作用域内编译!例如:

< child-component>{{ message }}
< /child-component>
复制代码

此时的message应该绑定的是父组件的数据还是子组件的数据?答案是父组件,这就是编译作用域。再看一个很容易犯错误的例子:


//childProperty是子组件中的属性,此时的代码不会如我们预期生效。父组件模版不能取到子组件中的状态
< child-component v-show="childProperty">< /child-component>
复制代码

根据编译作用域,此时正确的做法应该是在子组件模版中进行操作,绑定到相对应的节点中,如下:


Vue.component('child-component', {// 有效,因为是在正确的作用域内template: '< div v-show="childProperty">Child',data: function () {return {childProperty: true}}
})
复制代码

单个插槽

场景: 当在父组件模版中使用子组件时,父组件的内容将会被丢弃,如下子组件child-component:


< div>< h2>我是子组件的标题< /h2>
< /div>
复制代码

父组件模板:


< div>< h1>我是父组件的标题< /h1>< child-component>< p>这是一些初始内容< /p>< p>这是更多的初始内容< /p>< /child-component>
< /div>
复制代码

此时的渲染结果为:


< div>< h1>我是父组件的标题< div>< h2>我是子组件的标题< /h2>< /div>复制代码

此时父组件里面的内容就会被替换,此时的解决方法是可以使用slot单个插槽,例如在上面的子组件child-component中:


< div>< h2>我是子组件的标题< /h2>< slot>在没有要分发的内容时才会显示。< /solt>
< /div>
复制代码

此时的渲染结果就是 :


< div>< h1>我是父组件的标题< div>< h2>我是子组件的标题< /h2>< p>这是一些初始内容< /p>< p>这是更多的初始内容< /p>< /div>复制代码

此时的父组件的内容不会被丢弃。子组件模板只有一个没有属性的插槽时,父组件传入的整个内容片段将插入到插槽所在的 DOM 位置,并替换掉插槽标签本身。 最初在 标签中的任何内容都被视为备用内容。备用内容在子组件的作用域内编译,并且只有在宿主元素为空,且没有要插入的内容时才显示备用内容。

具名插槽

元素可以用一个特殊的特性 name 来进一步配置如何分发内容。多个插槽可以有不同的名字。具名插槽将匹配内容片段中有对应 slot 特性的元素。仍然可以有一个匿名插槽,它是默认插槽,作为找不到匹配的内容片段的备用插槽。如果没有默认插槽,这些找不到匹配的内容片段将被抛弃。如下一个child-layout:


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

父组件模板


< child-layout>< h1 slot="header">页面标题< /h1>< p>主要内容< /p>< p slot="footer">一些信息< /p>
< /child-layout>
复制代码

此时的渲染结果为:


< div class="container">< header>< h1>页面标题< /h1>< /header>< main>< p>主要内容。< /p>< /main>< footer>< p>一些信息< /p>< /footer>复制代码

由于使用了具名插槽,也就是使用了slot的name属性,使得父组件的内容被插到了子组件的指定位置。由于在子组件的main中使用了匿名slot,所以在父组件的模版中的p标签也没有用name属性,所以就行默认配对,如果此时没有匿名slot那么p标签的内容将会被抛弃。

作用域插槽

作用域插槽是一种特殊类型的插槽,用作一个 (能被传递数据的) 可重用模板,来代替已经渲染好的元素。在子组件中,只需将数据传递到插槽,就像你将 prop 传递给组件一样,例如在子组件中:


< div class="child">< slot data="data from child">< /slot>
< /div>
复制代码

此时在父组件模版中,必须要有< template >元素存在,并且要使用特殊属性slot-scope,以此表示它是作用域插槽的模板。slot-scope 的值将被用作一个临时变量名,此变量接收从子组件传递过来的 prop 对象,比如现在有父组件:


< div class="parent">< child>< template slot-scope="props">< span>data from parent< /span>< span>{{ props.data }}< /span>< /template>< /child>
< /div>
复制代码

此时渲染的结果是:


< div class="parent">< div class="child">< span>data from parent< /span>< span>data from child< /span>< /div>
< /div>
复制代码

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/283618.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

一文读懂研发效能洞察的五大流动指标

作者 | 张乐 目录 1 数字化时代&#xff0c;软件研发本身也要数字化 2 流框架及五大流动指标 1. 流动速率 2. 流动时间 3. 流动负载 4. 流动效率 5. 流动分布 3 研发过程中的常见瓶颈及解决思路 1. 稀缺的专家或资源&#xff0c;导致流动受阻 2. 缺乏自动化或工程能…

RabbitMQ队列

RabbitMQ是什么&#xff1f; RabbitMQ是一个在AMQP基础上完整的&#xff0c;可复用的企业消息系统。他遵循Mozilla Public License开源协议。 MQ全称为Message Queue, 消息队列&#xff08;MQ&#xff09;是一种应用程序对应用程序的通信方法。应用程序通过读写出入队列的消息&…

《ASP.NET Core 6框架揭秘实例》演示[14]:日志的进阶用法

为了对各种日志框架进行整合&#xff0c;微软创建了一个用来提供统一的日志编程模式的日志框架。《ASP.NET Core 6框架揭秘》实例演示[13]&#xff1a;日志的基本编程模式》以实例演示的方式介绍了日志的基本编程模式&#xff0c;现在我们来补充几种“进阶”用法。[本文节选《A…

Linux内核驱动GPIO的使用

一 概述Linux内核中gpio是最简单&#xff0c;最常用的资源(和 interrupt ,dma,timer一样)驱动程序&#xff0c;应用程序都能够通过相应的接口使用gpio&#xff0c;gpio使用0&#xff5e;MAX_INT之间的整数标识&#xff0c;不能使用负数,gpio与硬件体系密切相关的,不过linux有一…

什么是云原生,云原生技术为什么这么火?

文章目录 一、开篇浅谈二、云计算是什么三、云原生是什么四、云计算的四个层次 4.1 IaaS&#xff08;基础架构即服务&#xff09;4.2 PaaS&#xff08;平台即服务&#xff09;4.3 SaaS&#xff08;软件即服务&#xff09;4.4 DaaS&#xff08;数据即服务&#xff09;五、云原生…

Html5学习笔记1 元素 标签 属性

<!DOCTYPE html> <html lang"en"> <head><meta charset"UTF-8"><title>HTML5学习笔记</title> </head><body bgcolor"#90ee90">1.Html5的元素<br/><br/>元素指的是从開始标签到结束…

PerfView专题 (第五篇):如何寻找 C# 托管内存泄漏

一&#xff1a;背景 前几篇我们聊的都是 非托管内存泄漏&#xff0c;这一篇我们再看下如何用 PerfView 来排查 托管内存泄漏 &#xff0c;其实 托管内存泄漏 比较好排查&#xff0c;尤其是用 WinDbg&#xff0c;毕竟C#是带有丰富的元数据&#xff0c;不像C下去就是二进制。二&a…

DevOps及DevOps常用的工具介绍

目录 1. 什么是 DevOps2. DevOps 概念的起源 2.1. 单体架构 瀑布模式2.2. 分布式架构 敏捷开发模式 2.2.1. 多人协同开发问题2.2.2. 多机器问题2.2.3. 开发和运维角色的天生对立问题2.3. 微服务架构 DevOps3. DevOps 到底是什么4. DevOps 常用的工具 4.1. Jenkins4.2. Kuber…

2018年SIAF 广州国际工业自动化技术及装备展览会下周隆重开幕

同期研讨活动聚焦行业未来趋势&#xff0c;探索技术发展及实际应用层面。 华南最重要的工业自动化行业盛会之一&#xff0c;SIAF广州国际工业自动化技术及装备展览会&#xff0c;将于2018年3月4至6日在广州中国进出口商品交易会展馆隆重开幕。为期三天的展会将再度与广州国际模…

生活感言

There will be moments when the only thing left is for us to question our existence.总时有一些瞬间&#xff0c;让人感觉留给我们的唯一的事情就是质疑我们自身的存在。There are always days when we get so lonely and depressed and the world has lost its colours.我…

相约现在,遇见未来

# 遇见未来这个世界很小&#xff0c;我们就这样遇见。这个世界很大&#xff0c;分开就很难再见。大家好&#xff0c;我是 chait&#xff0c;很高兴我们在这里《遇见》。今天是我申请公众号通过后的第一天&#xff0c;也是在该平台发表的第一篇文章&#xff0c;唠嗑点啥呢&#…

2018-04-12

https://www.cnblogs.com/dragonsuc/p/5512797.html linux top https://www.cnblogs.com/kex1n/p/7211008.html linux 后台 http://dev.xxzhushou.cn/noticeArticle.html?ID65 chacha http://bbs.xxzhushou.cn/forum.php?modviewthread&tid88904141&extrapage%3D1%26…

有关并行的两个重要定律

本文摘自 葛一鸣 老师的《实战java高并发程序设计》一书。因为觉得写得好就摘下来了 将串行程序改造成并发程序&#xff0c;一般来说可以提高程序的整体性能&#xff0c;但是究竟能提升多少&#xff0c;甚至说究竟是否真的可以提高&#xff0c;还是一个需要研究的问题。目前&am…

java web中jsp常用标签

在jsp页面开发过程中&#xff0c;经常需要使用JSTL&#xff08;Java Server Pages Standard Tag Library&#xff09;标签开开发页面&#xff0c;是看起来更加的规整舒服。 JSTL主要提供了5大类标签库:1. 核心标签库: 为日常任务提供通用支持,如显示和设置变量,重复使用一…

深入OKHttp源码分析(二)----OkHttp任务调度核心类Dispatcher解析

OkHttp任务调度核心类Dispatcher解析 上一篇我们分析了okhttp的同步和异步请求的执行流程并进行了源码分析&#xff0c;深入OKHttp源码分析&#xff08;一&#xff09;----同步和异步请求流程和源码分析 那么今天我们来看看在整个执行流程中起到关键作用的Dispatcher调度类。首…

C# 二十年语法变迁之 C# 10参考

C# 二十年语法变迁之 C# 10参考https://benbowen.blog/post/two_decades_of_csharp_vi/自从 2000 年引入 C# 以来&#xff0c;该语言的规模已经大大增加&#xff0c;我不确定任何人是否有可能随时对每个语言特性都有深入的了解。因此&#xff0c;我想写一系列快速参考文章&…

IT圈中的Bug的类型与历史

美国计算机科学家、图灵奖获得者詹姆斯尼古拉格雷(Jim Gray)&#xff0c;在他的著名的论文“Why do computers stop and what can be done about it?”中首次提出了程序bug的类型&#xff0c;比如玻尔bug(Bohrbug)、 海森堡bug(Heisenbugs)等用著名科学家名称命名的bug。后来又…

Windows Nano Server安装配置详解03:远程管理Nano Server

远程管理Nano Server主要是通过使用远程powershell的方式。首先&#xff0c;我们把Nano Server的登录凭据保存到$cred变量之中&#xff0c;如图。其次&#xff0c;把远程Nano Server服务器添加到远程管理机本地的trustedHosts中&#xff0c;否则会报下面的错误&#xff0c;如图…

你和阿里资深架构师之间,差的不仅仅是年龄(进阶必看)

导读&#xff1a;阅读本文需要有足够的时间&#xff0c;笔者会由浅到深带你一步一步了解一个资深架构师所要掌握的各类知识点&#xff0c;你也可以按照文章中所列的知识体系对比自身&#xff0c;对自己进行查漏补缺&#xff0c;觉得本文对你有帮助的话&#xff0c;可以点赞关注…

[luoguP2601] [ZJOI2009]对称的正方形(二维Hash + 二分 || Manacher)

传送门 很蒙蔽&#xff0c;不知道怎么搞。 网上看题解有说可以哈希二分搞&#xff0c;也有的人说用Manacher搞&#xff0c;Manacher是什么鬼&#xff1f;以后再学。 对于这个题&#xff0c;可以从矩阵4个角hash一遍&#xff0c;然后枚举矩阵中的点&#xff0c;再二分半径。 但是…