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 相关文章推荐
子窗口、父窗口和Silverlight之间的相互调用
Aug 16 Javascript
JS+CSS设置img在DIV中只显示Img垂直居中的部分
Oct 24 Javascript
原生JS操作网页给p元素添加onclick事件及表格隔行变色
Dec 01 Javascript
jQuery在ul中显示某个li索引号的方法
Mar 17 Javascript
简单学习JavaScript中的for语句循环结构
Nov 10 Javascript
jquery获取table指定行和列的数据方法(当前选中行、列)
Nov 07 Javascript
JavaScript调试的多个必备小Tips
Jan 15 Javascript
vue favicon设置以及动态修改favicon的方法
Dec 21 Javascript
jquery弹窗时禁止body滚动条滚动的例子
Sep 21 jQuery
vue不操作dom实现图片轮播的示例代码
Dec 18 Javascript
基于jquery实现彩色投票进度条代码解析
Aug 26 jQuery
vue @ ~ 相对路径 路径别名设置方式
Jun 05 Vue.js
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插入中文到sqlserver 2008里出现乱码的解决办法分享
2012/07/19 PHP
php中current、next与reset函数用法实例
2014/11/17 PHP
Yii2.0预定义的别名功能小结
2016/07/04 PHP
PHP7扩展开发之hello word实现方法详解
2018/01/15 PHP
IE6 弹出Iframe层中的文本框“经常”无法获得输入焦点
2009/12/27 Javascript
jQuery Tools tooltip使用说明
2012/07/14 Javascript
jquery入门—数据删除与隔行变色以及图片预览
2013/01/07 Javascript
jquery实现兼容浏览器的图片上传本地预览功能
2013/10/14 Javascript
Iframe 自动适应页面的高度示例代码
2014/02/26 Javascript
jQuery简单tab切换效果实现方法
2015/04/08 Javascript
javascript中setAttribute()函数使用方法及兼容性
2015/07/19 Javascript
ES6新特性三: Generator(生成器)函数详解
2017/04/21 Javascript
如何使用JS在HTML中自定义字符串格式化
2017/07/20 Javascript
angular4中关于表单的校验示例
2017/10/16 Javascript
angular中ui calendar的一些使用心得(推荐)
2017/11/03 Javascript
EasyUI实现下拉框多选功能
2017/11/07 Javascript
用Axios Element实现全局的请求loading的方法
2018/03/15 Javascript
最全vue的vue-amap使用高德地图插件画多边形范围的示例代码
2020/07/17 Javascript
[44:50]2018DOTA2亚洲邀请赛 4.1 小组赛 A组 TNC vs VG
2018/04/02 DOTA
python的即时标记项目练习笔记
2014/09/18 Python
Python爬虫爬验证码实现功能详解
2016/04/14 Python
Python中二维列表如何获取子区域元素的组成
2017/01/19 Python
Python读取sqlite数据库文件的方法分析
2017/08/07 Python
如何在mac环境中用python处理protobuf
2019/12/25 Python
Django框架静态文件处理、中间件、上传文件操作实例详解
2020/02/29 Python
丝芙兰波兰:Sephora.pl
2018/03/25 全球购物
英国羊绒服装购物网站:Pure Collection
2018/10/22 全球购物
JDO的含义
2012/11/17 面试题
关心下一代工作先进事迹
2014/08/15 职场文书
2014年管理工作总结
2014/11/22 职场文书
颐和园的导游词
2015/01/30 职场文书
社会实践活动报告
2015/02/05 职场文书
2016应届毕业生自荐信范文
2016/01/28 职场文书
五年级数学教学反思
2016/02/16 职场文书
微信小程序用户授权最佳实践指南
2021/05/08 Javascript
Windows7下FTP搭建图文教程
2022/08/05 Servers