插槽

一直对插槽不理解,今天学习,并整理一下,希望日后可以灵活运用。

(一)插槽内容

先简单来个例子,看一下插槽的租作用。

1.1 不使用插槽

父组件中:

  <div id="app">
<h1>这是父组件:{{msg}}</h1>
<child-component>你好</child-component>
</div>

子组件中:

 <div>
<h2>这是子组件,Child-Component</h2>
</div>

结果:

结论:

父组件引用子组件时,在子组件内写入:如(你好或者html),都不会显示。

1.2 使用插槽

父组件中:

  <div id="app">
<h1>这是父组件:{{msg}}</h1>
<child-component>你好</child-component>
</div>

子组件中:

 <div>
<h2>这是子组件,Child-Component</h2>
<slot></slot>
</div>

结果:

结论:

Vue 实现了一套内容分发的 API,这套 API 的设计灵感源自 Web Components 规范草案,将 <slot>元素作为承载分发内容的出口。当组件渲染的时候,<slot></slot> 将会被替换为“你好”。插槽内可以包含任何模板代码,包括 HTML

1.3 包含html

父组件:

  <div id="app">
<h1>这是父组件:{{msg}}</h1>
<child-component>
<span>slot 测试</span>
</child-component>
</div>

1.4 如果子组件没有<slot>

如果子组件中没有任何的<slot>,那么在父组件中引用子组件时,在子组件的起始标签和结束标签之间的任何内容都会被抛弃。

(二)后备内容

后备内容,即为没有为插槽设置任何内容时,显示的默认内容。

父组件:

没有为插槽设置任何内容

  <div id="app">
<h1>这是父组件:{{msg}}</h1>
<child-component></child-component>
</div>

子组件:

在子组件中,添加后备内容

   <div>
<h2>这是子组件,Child-Component</h2>
<slot>
<span>这是后备内容</span>
</slot>
</div>

结果:

但是如果设置插槽,后备内容则不会显示。

(三)具名插槽

有的时候,我们需要多个插槽,例如:

父子件:

  <div id="app">
<h1 style="text-align: center">这是父组件:{{msg}}</h1>
<child-component>
<template v-slot:header>
<h3 style="text-align: center;color: blue">这是header部分</h3>
</template>
<p style="color: blueviolet;text-align: center">这是主题部分</p>
<template v-slot:fooder>
<h3 style="text-align: center;color: aqua">这是fooder部分</h3>
</template>
</child-component>
</div>

子组件:

   <div>
<h2 style="text-align: center">这是子组件,Child-Component</h2>
<slot name="header"></slot>
<slot></slot>
<slot name="footer"></slot>
</div>

(四)作用域插槽

父组件中插槽中,可以取到子组件中数据。

父组件:

在v-slot添加元素上的特性被称为插槽 prop

   <div id="app">
<h2 >这是父组件!</h2>
<child-slot>
<template v-slot:default="user">
<p>父组件中,取子组件中的值:{{user.user.lastName}}</p>
</template>
</child-slot>
</div>

子组件:

在<slot>中,绑定数据v-bind:user="user"

  <div>
<h2>这是子组件</h2>
<span>FirstName:{{user.firstName}},LastName:{{user.lastName}}</span>
<slot v-bind:user="user">{{user.lastName}}</slot>
</div>

结果:

(五)独占默认插槽的缩写语法

当子组件中,只提供默认插槽时,组件的标签才可以被当作插槽的模板来使用。这样我们就可以把 v-slot 直接用在组件上:

<child-slot>
<template v-slot:default="user">
<p>父组件中,取子组件中的值:{{user.user.lastName}}</p>
</template>
</child-slot>

也可以,简写为:

<child-slot>
<template v-slot="user">
<p>父组件中,取子组件中的值:{{user.user.lastName}}</p>
</template>
</child-slot>

22. VUE 插槽-详解的更多相关文章

  1. Vue 插槽详解

    Vue插槽,是学习vue中必不可少的一节,当初刚接触vue的时候,对这些掌握的一知半解,特别是作用域插槽一直没明白. 后面越来越发现插槽的好用. 分享一下插槽的一些知识吧. 分一下几点: 1.插槽内可 ...

  2. Vue插槽详解 | 什么是插槽?

    作者 | Jeskson 来源 | 达达前端小酒馆 什么是插槽?插槽的指令为v-slot,它目前取代了slot和slot-scope,插槽内容,vue实例一套内容分发的api,将slot元素作为承载分 ...

  3. Vue插槽详解

    简介 插槽:简单理解就是组件内部留一个或多个的插槽位置,可供组件传对应的模板代码进去.插槽的出现,让组件变的更加灵活. 一.匿名插槽 // 组件(父) <my-component> < ...

  4. cocos2dx常见的46中+22中动作详解

    cocos2dx常见的46中+22中动作详解 分类: iOS2013-10-16 00:44 1429人阅读 评论(0) 收藏 举报 bool HelloWorld::init(){    ///// ...

  5. Vue 路由详解

    Vue 路由详解 对于前端来说,其实浏览器配合超级连接就很好的实现了路由功能.但是对于单页面应用来说,浏览器和超级连接的跳转方式已经不能适用,所以各大框架纷纷给出了单页面应用的解决路由跳转的方案. V ...

  6. Vue 实例详解与生命周期

    Vue 实例详解与生命周期 Vue 的实例是 Vue 框架的入口,其实也就是前端的 ViewModel,它包含了页面中的业务逻辑处理.数据模型等,当然它也有自己的一系列的生命周期的事件钩子,辅助我们进 ...

  7. Vue.prototype详解

    参考地址:Vue.prototype详解 如果需要设置 全局变量,在main.js中,Vue实例化的代码里添加. 不想污染全局作用域.这种情况下,你可以通过在 原型 上定义它们使其在每个Vue实例中可 ...

  8. 六. Vue CLI详解

    1. Vue CLI理解 1.1 什么是Vue CLI 如果你只是简单写几个Vue的Demo程序, 那么你不需要Vue CLI,如果你在开发大型项目那么你需要它, 并且必然需要使用Vue CLI. 使 ...

  9. vue指令详解

    一.vue简绍 1. Vue.js是什么    Vue.js也称为Vue,读音/vju:/,类似view,错误读音v-u-e. 版本分为v1.0 和 v2.0 2.Vue.js的特点 1. 是一个构建 ...

随机推荐

  1. 五分钟快速上手MyBatis

    MyBatis 是一款优秀的持久层框架,它支持自定义 SQL.存储过程以及高级映射. 免除了几乎所有的 JDBC 代码以及设置参数和获取结果集的工作. 可以通过简单的 XML 或注解来配置和映射,Ja ...

  2. java自学第4期——:Scanner类、匿名对象介绍、Random类、ArrayList集合、标准类格式、String类、static静态、Arrays工具类、Math类(1)

    一.Scanner类 1.api简介: 应用程序编程接口 2.Scanner类: 作用:获取键盘输入的数据 位置: java.util.Scanner. 使用:使用成员方法nextInt() 和 ne ...

  3. close() 和fluse()区别

    1.close()默认包含了一次flush()操作,关闭之后,就不能再写入了. 2.flush()刷新,flush()之后,可以接着写入. 3.缓冲区默认大小是8192字节,如果小于8192字节,不会 ...

  4. 共享内存与存储映射(mmap)

    [前言]对这两个理解还是不够深刻,写一篇博客来记录一下. 首先关于共享内存的链接:共享内存.里面包含了创建共享内存区域的函数,以及两个进程怎么挂载共享内存通信,分离.释放共享内存. 共享内存的好处就是 ...

  5. 转: 微信已支持发送最大 200MB 的视频了,并且不会被压缩 来自腾讯微信团队的视频消息,目前 iOS 版本的微信已支持发送最大 200MB 的视频与图片了,并且不会被压缩.安卓版本未来一段时间会支 ...

  6. HoloWAN在连接路由器时应该选择WAN口还是LAN口,有什么区别?

    HoloWAN在连接路由器时应该选择WAN口还是LAN口,有什么区别? 在解决问题前,需要连接到,路由器的WAN口和LAN口的作用不同. WAN口是对外的接口,连接广域网.当联网设备和路由器都开启了D ...

  7. 死磕Spring之IoC篇 - @Autowired 等注解的实现原理

    该系列文章是本人在学习 Spring 的过程中总结下来的,里面涉及到相关源码,可能对读者不太友好,请结合我的源码注释 Spring 源码分析 GitHub 地址 进行阅读 Spring 版本:5.1. ...

  8. 关于,java-webservice接口,根据服务端,自动生成客户端调用时,响应时间慢

    我这边遇到的问题,是在和对方进行webservice接口交互的时候,用工具,调用对方的webservice接口,对方响应很快.但是用java生成的客户端调用就会很慢才得到响应.大概有5分钟左右. 这里 ...

  9. rest framework Response

    回应 不同于基本的HttpResponse对象,TemplateResponse对象保留先前由视图提供给计算响应上下文的细节.该响应的最终输出,不计算直到需要它,以后在响应过程. - Django文档 ...

  10. MySQL深入研究--学习总结(4)

    前言 接上文,继续学习后续章节.细心的同学已经发现,我整理的并不一定是作者讲的内容,更多是结合自己的理解,加以阐述,所以建议结合原文一起理解. 第13章<为什么表数据删除一般,表文件大小不变?& ...