Vue slot用法(小结)


Posted in Javascript onOctober 22, 2018

之前看官方文档,由于自己理解的偏差,不知道slot是干嘛的,看到小标题,使用Slot分发内容,就以为 是要往下派发内容。然后就没有理解插槽的概念。其实说白了,使用slot就是先圈一块地,将来可能种花种菜,也有可能在这块地上建房子。然而slot可以以一当十,可以插入很多东西。不知明白否?

由于项目经验有限,这篇我就先跟着官网的知识点走,当然会加入自己的部分项目代码。

关于slot是这样说的,

除非子组件模板包含至少一个 <slot> 插口,否则父组件的内容将会被丢弃。当子组件模板只有一个没有属性的 slot 时,父组件整个内容片段将插入到 slot 所在的 DOM 位置,并替换掉 slot 标签本身。

最初在 <slot> 标签中的任何内容都被视为备用内容。备用内容在子组件的作用域内编译,并且只有在宿主元素为空,且没有要插入的内容时才显示备用内容。

单个 Slot

在子组件内使用特殊的<slot>元素就可以为这个子组件添加一个 slot (插槽),在父组件模板里,插入在子组件标签内的所有内容将替代子组件的<slot>标签及它的内容.示例代码如下:

<!DOCTYPE html>
<html>
<head>
  <meta charset="utf-8">
  <title>示例</title>

</head>
<body>

  <div id="app">
    <child-component>
      <p>分发的内容</p>
      <p>更多分发的内容</p>
    </child-component>
  </div>
  
  <script src="https://unpkg.com/vue/dist/vue.min.js"></script>

  <script>

    Vue.component('child-component', {
      template: '\
      <div>\
        <slot>\
          <p>如果父组件没用插入内容,我将作为默认出现</p>\
        </slot>\
      </div>'
    });

    var app = new Vue({
      el: '#app'
    })

  </script>

</body>
</html>

子组件 child-component 的模板内定义一个 <slot> 元素,并且用一个 <p> 作为默认的内容,在父组件没有使用 slot 时,会渲染这段默认的文本;如果写入了 slot ,那就会替换整个 <slot>.所以上列渲染后的结果为:

<div id="app">
   <div>
    <p>分发的内容</p>
    <p>更多分发的内容</p>
  </div>
</div>

注意:子组件<slot>内的备用内容,它的作用域时子组件本身.

具名 Slot

给 <slot> 元素指定一个 name 后可以分发多个内容,具名 Slot 可以与单个 Slot 共存,例如下面的示例:

<!DOCTYPE html>
<html>
<head>
  <meta charset="utf-8">
  <title>示例</title>

</head>
<body>

  <div id="app">
    <child-component>
      <h2 slot="header">标题</h2>
      <p>正文内容</p>
      <p>更多正文内容</p>
      <div slot="footer">底部信息</div>
    </child-component>
  </div>
  
  <script src="https://unpkg.com/vue/dist/vue.min.js"></script>

  <script>

    Vue.component('child-component', {
      template: '\
      <div class="component">\
        <div class="header">\
          <slot name="header"></slot>\
        </div>\
        <div class="main">\
          <slot></slot>\
        </div>\
        <div class="footer">\
          <slot name="footer"></slot>\
        </div>\
      </div>'
    });

    var app = new Vue({
      el: '#app'
    })

  </script>

</body>
</html>

子组件内声明了3个 <slot> 元素,其中在<div class="main">内的<slot> 没用使用 name 特性,它将作为默认 slot 出现,父组件没有使用 slot 特性的元素与内容都将出现在这里.

如果没有指定默认的匿名 slot, 父组件内多余的内容片段都将被抛弃.

上例最终渲染后的结果为:

<div id="app">
    <div class="container">
      <div class="header">
        <h2>标题</h2>
      </div>
      <div class="main">
        <p>正文内容</p>
        <p>更多的正文内容</p>
      </div>
      <div class="footer">
        <div>底部信息</div>
      </div>
    </div>
  </div>

在组合使用组件时,内容分发API至关重要.

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持三水点靠木。

Javascript 相关文章推荐
JavaScript DOM学习第六章 表单实例
Feb 19 Javascript
Javascript 网页水印(非图片水印)实现代码
Mar 01 Javascript
基于jquery实现的类似百度搜索的输入框自动完成功能
Aug 23 Javascript
scrollWidth,clientWidth,offsetWidth的区别
Jan 13 Javascript
jQuery实现根据类型自动显示和隐藏表单
Mar 18 Javascript
深入探究AngularJS框架中Scope对象的超级教程
Jan 04 Javascript
JS实现的相册图片左右滚动完整实例
Nov 23 Javascript
设置cookie指定时间失效(实例代码)
May 28 Javascript
Angular 如何使用第三方库的方法
Apr 18 Javascript
详解如何使用微信小程序云函数发送短信验证码
Mar 13 Javascript
vue.js实现备忘录demo
Jun 26 Javascript
js中!和!!的区别与用法
May 09 Javascript
TypeScript基础入门教程之三重斜线指令详解
Oct 22 #Javascript
vue项目中使用Hbuilder打包app 设置沉浸式状态栏的方法
Oct 22 #Javascript
vue-cli项目中使用echarts图表实例
Oct 22 #Javascript
vue使用echarts图表的详细方法
Oct 22 #Javascript
在vue中使用echarts图表实例代码详解
Oct 22 #Javascript
Koa 使用小技巧(小结)
Oct 22 #Javascript
在js代码拼接dom对象到页面上的模板总结
Oct 21 #Javascript
You might like
PHP 变量定义和变量替换的方法
2009/07/30 PHP
Laravel中unique和exists验证规则的优化详解
2018/01/28 PHP
php提取微信账单的有效信息
2018/10/01 PHP
laravel实现Auth认证,登录、注册后的页面回跳方法
2019/09/30 PHP
写出更好的JavaScript程序之undefined篇(中)
2009/11/23 Javascript
JavaScript插入动态样式实现代码
2012/02/22 Javascript
js去字符串前后空格5种实现方法及比较
2013/04/03 Javascript
JS实现图片翻书效果示例代码
2013/09/09 Javascript
ExtJS自定义主题(theme)样式详解
2013/11/18 Javascript
jQuery使用removeClass方法删除元素指定Class的方法
2015/03/26 Javascript
Javascript中setTimeOut和setInterval的定时器用法
2015/06/12 Javascript
javascript实现简单的ajax封装示例
2016/12/28 Javascript
bootstrapValidator表单验证插件学习
2016/12/30 Javascript
Bootstrap table表格简单操作
2017/02/07 Javascript
vue2中使用less简易教程
2018/03/27 Javascript
vue中 数字相加为字串转化为数值的例子
2019/11/07 Javascript
[11:57]《一刀刀一天》第十七期:TI中国军团加油!
2014/05/26 DOTA
详细解析Python当中的数据类型和变量
2015/04/25 Python
python使用pymysql实现操作mysql
2016/09/13 Python
Python中的字符串操作和编码Unicode详解
2017/01/18 Python
Python3中详解fabfile的编写
2018/06/24 Python
python 不以科学计数法输出的方法
2018/07/16 Python
解决python3运行selenium下HTMLTestRunner报错的问题
2018/12/27 Python
tensorflow 初始化未初始化的变量实例
2020/02/06 Python
Python爬虫之Selenium多窗口切换的实现
2020/12/04 Python
美国最大的城市服装和运动鞋零售商:Jimmy Jazz
2016/11/19 全球购物
联想哥伦比亚网上商城:Lenovo Colombia
2017/01/10 全球购物
你所知道的集合类都有哪些?主要方法?
2012/12/31 面试题
财务会计专业毕业生自荐信
2013/10/02 职场文书
市优秀教师事迹材料
2014/02/05 职场文书
2014教师专业技术工作总结
2014/12/03 职场文书
2015年世界无烟日演讲稿
2015/03/18 职场文书
党员转正介绍人意见
2015/06/03 职场文书
大学生村官驻村工作心得体会
2016/01/23 职场文书
致创业您:正能量激励人心句子(48条)
2019/08/15 职场文书
你喜欢篮球吗?Python实现篮球游戏
2021/06/11 Python