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延迟加载
Mar 09 Javascript
又一个小巧的图片预加载类
May 05 Javascript
jquery 弹出层注册页面等(asp.net后台)
Jun 17 Javascript
jquery blockUI 遮罩不能消失与不能提交的解决方法
Sep 17 Javascript
JS检测图片大小的实例
Aug 21 Javascript
js登录弹出层特效
Mar 07 Javascript
JavaScript移除数组内重复元素的方法
Mar 18 Javascript
深入理解Javascript中的valueOf与toString
Jan 04 Javascript
Bootstrap popover 实现鼠标移入移除显示隐藏功能方法
Jan 24 Javascript
微信小程序中使用echarts的实现方法
Apr 24 Javascript
浅谈layui 数据表格前后台传值的问题
Sep 12 Javascript
js canvas实现五子棋小游戏
Jan 22 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
经典的PHPer为什么被认为是草根?
2007/04/02 PHP
PHP实现GIF图片验证码
2015/11/04 PHP
js中使用DOM复制(克隆)指定节点名数据到新的XML文件中的代码
2011/07/27 Javascript
关于jquery的多个选择器的使用示例
2013/10/18 Javascript
jquery改变tr背景色的示例代码
2013/12/28 Javascript
js校验表单后提交表单的三种方法总结
2014/02/28 Javascript
深入探讨前端框架react
2015/12/09 Javascript
JS实现alert中显示换行的方法
2015/12/17 Javascript
基于jquery实现百度新闻导航菜单滑动动画
2016/03/15 Javascript
深入浅析JavaScript的API设计原则
2016/06/14 Javascript
JavaScript实现使用Canvas绘制图形的基本教程
2016/10/27 Javascript
vue keep-alive请求数据的方法示例
2018/05/16 Javascript
简谈创建React Component的几种方式
2019/06/15 Javascript
浅谈vue-router路由切换 组件重用挖下的坑
2019/11/01 Javascript
Vue将props值实时传递 并可修改的操作
2020/08/09 Javascript
Node.js fs模块原理及常见用途
2020/10/22 Javascript
[48:00]完美世界DOTA2联赛循环赛 Forest vs Inki BO2第二场 11.04
2020/11/04 DOTA
Python中Django 后台自定义表单控件
2017/03/28 Python
django实现用户登陆功能详解
2017/12/11 Python
简单了解什么是神经网络
2017/12/23 Python
Python爬豆瓣电影实例
2018/02/23 Python
python实现扫描日志关键字的示例
2018/04/28 Python
python使用matplotlib画饼状图
2018/09/25 Python
Flask框架模板继承实现方法分析
2019/07/31 Python
Python任务自动化工具tox使用教程
2020/03/17 Python
Python文本文件的合并操作方法代码实例
2020/03/31 Python
Python中return函数返回值实例用法
2020/11/19 Python
pycharm最新激活码有效期至2100年(亲测可用)
2021/02/05 Python
Java如何获得ResultSet的总行数
2016/09/03 面试题
优秀企业获奖感言
2014/02/01 职场文书
汽车机修工岗位职责
2014/03/06 职场文书
农林环境专业求职信
2014/03/13 职场文书
无毒社区工作方案
2014/05/23 职场文书
同乡会致辞
2015/07/30 职场文书
药品销售员2015年终工作总结
2015/10/22 职场文书
2019年教师入党申请书
2019/06/27 职场文书