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中each()的使用方法说明
Aug 19 Javascript
javascript实现限制上传文件大小
Feb 06 Javascript
浅谈jQuery中replace()方法
May 13 Javascript
JS实现自动变换的菜单效果代码
Sep 09 Javascript
JavaScript简单遍历DOM对象所有属性的实现方法
Oct 21 Javascript
JavaScript中的继承之类继承
May 01 Javascript
js实现带三角符的手风琴效果
Mar 01 Javascript
微信小程序中顶部导航栏的实现代码
Mar 30 Javascript
在Vue中使用echarts的方法
Feb 05 Javascript
解决vue.js 数据渲染成功仍报错的问题
Aug 25 Javascript
jQuery列表动态增加和删除的实现方法
Nov 05 jQuery
工作中常用js功能汇总
Nov 07 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
建立动态的WML站点(二)
2006/10/09 PHP
php笔记之:php数组相关函数的使用
2013/04/26 PHP
解析php中session的实现原理以及大网站应用应注意的问题
2013/06/17 PHP
php的api数据接口书写实例(推荐)
2016/09/22 PHP
Firefox outerHTML实现代码
2009/06/04 Javascript
autoIMG 基于jquery的图片自适应插件代码
2011/03/12 Javascript
js语法学习之判断一个对象是否为数组
2014/05/13 Javascript
使用jquery选择器如何获取父级元素、同级元素、子元素
2014/05/14 Javascript
jquery实现的判断倒计时是否结束代码
2016/02/05 Javascript
所见即所得的富文本编辑器bootstrap-wysiwyg使用方法详解
2016/05/27 Javascript
jQuery中的通配符选择器使用总结
2016/05/30 Javascript
原生js实现商品放大镜效果
2017/01/12 Javascript
vue组件中使用iframe元素的示例代码
2017/12/13 Javascript
详解angular2如何手动点击特定元素上的点击事件
2018/10/16 Javascript
微信小程序实现商品属性联动选择
2019/02/15 Javascript
监听element-ui table滚动事件的方法
2019/03/26 Javascript
python生成随机验证码(中文验证码)示例
2014/04/03 Python
极简的Python入门指引
2015/04/01 Python
Python实现变量数值交换及判断数组是否含有某个元素的方法
2017/09/18 Python
15行Python代码带你轻松理解令牌桶算法
2018/03/21 Python
利用python打开摄像头及颜色检测方法
2018/08/03 Python
对python PLT中的image和skimage处理图片方法详解
2019/01/10 Python
python多线程并发让两个LED同时亮的方法
2019/02/18 Python
我就是这样学习Python中的列表
2019/06/02 Python
解决python文件双击运行秒退的问题
2019/06/24 Python
Django框架之DRF 基于mixins来封装的视图详解
2019/07/23 Python
Django中在xadmin中集成DjangoUeditor过程详解
2019/07/24 Python
Python 获取numpy.array索引值的实例
2019/12/06 Python
Python读取JSON数据操作实例解析
2020/05/18 Python
python3实现名片管理系统(控制台版)
2020/11/29 Python
CSS3中31种选择器使用方法教程
2013/12/05 HTML / CSS
英国高档时尚男装购物网站:MR PORTER
2016/08/09 全球购物
运动会演讲稿
2014/05/07 职场文书
2014世界杯球队球队口号
2014/06/05 职场文书
员工升职自荐信
2015/03/27 职场文书
二婚主持词
2015/06/30 职场文书