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 同时提交多个Web表单的方法
Feb 19 Javascript
jquery教程限制文本框只能输入数字和小数点示例分享
Jan 13 Javascript
jquery 页眉单行信息滚动显示实现思路及代码
Jun 26 Javascript
JavaScript Promise启示录
Aug 12 Javascript
JS实现n秒后自动跳转的两种方法
Nov 30 Javascript
vue发送ajax请求详解
Oct 09 Javascript
微信小程序学习笔记之本地数据缓存功能详解
Mar 29 Javascript
从零撸一个pc端vue的ui组件库( 计数器组件 )
Aug 08 Javascript
JS实现秒杀倒计时特效
Jan 02 Javascript
jQuery 常用特效实例小结【显示与隐藏、淡入淡出、滑动、动画等】
May 19 jQuery
JavaScript实现点击图片换背景
Nov 20 Javascript
输入框跟随文字内容适配宽实现示例
Aug 14 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图片验证码实例
2014/03/21 PHP
php支付宝接口用法分析
2015/01/04 PHP
PHP开发框架laravel安装与配置教程
2015/03/13 PHP
Javascript 强制类型转换函数
2009/05/17 Javascript
jQuery(1.3.2) 7行代码搞定跟随屏幕滚动的层
2009/05/21 Javascript
js判断客户端是iOS还是Android等移动终端的方法
2013/12/11 Javascript
JavaScript中的console.assert()函数介绍
2014/12/29 Javascript
Javascript中prototype属性实现给内置对象添加新的方法
2015/05/14 Javascript
Bootstrap实现默认导航栏效果
2020/09/21 Javascript
JavaScript实现跑马灯抽奖活动实例代码解析与优化(二)
2016/02/16 Javascript
浅谈js控制li标签排序问题 js调用php函数的方法
2016/10/16 Javascript
解决vue-cli创建项目的loader问题
2018/03/13 Javascript
Vue 使用beforeEach实现登录状态检查功能
2019/10/31 Javascript
bootstrap-closable-tab可实现关闭的tab标签页插件
2020/08/09 Javascript
基于JavaScript实现简单抽奖功能代码实例
2020/10/20 Javascript
element中Steps步骤条和Tabs标签页关联的解决
2020/12/08 Javascript
python时间整形转标准格式的示例分享
2014/02/14 Python
Python for Informatics 第11章 正则表达式(一)
2016/04/21 Python
Python中内建函数的简单用法说明
2016/05/05 Python
详解Python实现按任意键继续/退出的功能
2016/08/19 Python
浅谈python中np.array的shape( ,)与( ,1)的区别
2018/06/04 Python
Python 画出来六维图
2019/07/26 Python
构建高效的python requests长连接池详解
2020/05/02 Python
PyCharm Community安装与配置的详细教程
2020/11/24 Python
波兰数码相机及配件网上商店: Cyfrowe.pl
2017/06/19 全球购物
关于Assembly命名空间的三个面试题
2015/07/23 面试题
干部行政关系介绍信
2014/01/17 职场文书
幼儿园秋游活动方案
2014/01/21 职场文书
《小猫刮胡子》教学反思
2014/02/21 职场文书
学校欢迎标语
2014/06/18 职场文书
金融管理专业求职信
2014/07/10 职场文书
2014年保卫部工作总结
2014/11/21 职场文书
2015年重阳节活动总结
2015/03/24 职场文书
诗词赏析-(浣溪沙)
2019/08/13 职场文书
《家世》读后感:看家训的力量
2019/12/30 职场文书
Spring mvc是如何实现与数据库的前后端的连接操作的?
2021/06/30 Java/Android