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 相关文章推荐
Jquery中给animation加更多的运作效果实例
Sep 05 Javascript
给超链接添加特效鼠标移动展示提示信息且随鼠标移动
Oct 17 Javascript
验证码在IE中不刷新而谷歌等浏览器正常的解决方案
Mar 18 Javascript
ie8下修改input的type属性报错的解决方法
Sep 16 Javascript
JS时间特效最常用的三款
Aug 19 Javascript
第九篇Bootstrap导航菜单创建步骤详解
Jun 21 Javascript
详谈js遍历集合(Array,Map,Set)
Apr 06 Javascript
vue+axios+element ui 实现全局loading加载示例
Sep 11 Javascript
JS二级菜单不同实现方法分析【4种方法】
Dec 21 Javascript
Vue中的验证登录状态的实现方法
Mar 09 Javascript
基于Vue插入视频的2种方法小结
Apr 02 Javascript
微信小程序实现点击页面出现文字
Sep 21 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 imagegrabscreen和imagegrabwindow(截取网站缩略图)的实例代码
2013/11/07 PHP
PHP简单获取视频预览图的方法
2015/03/12 PHP
php自定义urlencode,urldecode函数实例
2015/03/24 PHP
php实现随机生成易于记忆的密码
2015/06/19 PHP
PHP操作FTP类 (上传、下载、移动、创建等)
2016/03/31 PHP
JS 动态加载脚本的4种方法
2009/05/05 Javascript
网页加载时页面显示进度条加载完成之后显示网页内容
2012/12/23 Javascript
JS判断对象是否存在的10种方法总结
2013/12/23 Javascript
深入了解Node.js中的一些特性
2014/09/25 Javascript
jQuery实现文本展开收缩特效
2015/06/03 Javascript
PHP结合jQuery实现的评论顶、踩功能
2015/07/22 Javascript
Angular2 多级注入器详解及实例
2016/10/30 Javascript
详解如何较好的使用js
2016/12/16 Javascript
微信小程序实现给嵌套template模板传递数据的方式总结
2017/12/18 Javascript
vue.js表单验证插件(vee-validate)的使用教程详解
2019/05/23 Javascript
jquery实现动态创建form并提交的方法示例
2019/05/27 jQuery
Vue动态修改网页标题的方法及遇到问题
2019/06/09 Javascript
layui-table表复选框勾选的所有行数据获取的例子
2019/09/13 Javascript
微信小程序 wx:for 与 wx:for-items 与 wx:key的正确用法
2020/05/19 Javascript
[01:03:09]完美世界DOTA2联赛PWL S2 Forest vs SZ 第二场 11.25
2020/11/26 DOTA
python3 读写文件换行符的方法
2018/04/09 Python
python Pandas 读取txt表格的实例
2018/04/29 Python
Python pygorithm模块用法示例【常见算法测试】
2018/08/16 Python
Empty test suite.(PyCharm程序运行错误的解决方法)
2018/11/30 Python
Python学习笔记之Django创建第一个数据库模型的方法
2019/08/07 Python
python判断自身是否正在运行的方法
2019/08/08 Python
手机端用rem+scss做适配的详解
2017/11/15 HTML / CSS
英国景点门票网站:attractiontix
2019/08/27 全球购物
英国时尚高尔夫服装购物网站:Trendy Golf
2020/01/10 全球购物
英国鞋网:Rubber Sole
2020/03/03 全球购物
手机促销活动方案
2014/02/05 职场文书
学校党的群众路线教育实践活动个人整改方案
2014/10/31 职场文书
合作合同协议书范本
2015/01/27 职场文书
生产车间主任岗位职责
2015/04/08 职场文书
2015年结对帮扶工作总结
2015/05/04 职场文书
互联网的下一个风口:新的独角兽将诞生
2019/08/02 职场文书