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 动态访问JSon元素示例代码
Aug 30 Javascript
JavaScript获取页面中第一个锚定文本的方法
Apr 03 Javascript
详解JavaScript ES6中的模板字符串
Jul 28 Javascript
原生js实现ajax方法(超简单)
Sep 20 Javascript
javascript 定时器工作原理分析
Dec 03 Javascript
js实现无缝滚动图
Feb 22 Javascript
Angular简单验证功能示例
Dec 22 Javascript
如何在vue中使用ts的示例代码
Feb 28 Javascript
vue中keep-alive的用法及问题描述
May 15 Javascript
使用Karma做vue组件单元测试的实现
Jan 16 Javascript
js实现无缝轮播图插件封装
Jul 31 Javascript
vue-video-player视频播放器使用配置详解
Oct 23 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/01/07 PHP
php以post形式发送xml的方法
2014/11/04 PHP
自己写的php中文截取函数mb_strlen和mb_substr
2015/02/09 PHP
ThinkPHP函数详解之M方法和R方法
2015/09/10 PHP
PHP+JS实现的商品秒杀倒计时用法示例
2016/11/15 PHP
PHP分页显示的方法分析【附PHP通用分页类】
2018/05/10 PHP
Js+Dhtml:WEB程序员简易开发工具包(预先体验版)
2006/11/07 Javascript
jquery实现select选中行、列合计示例
2014/04/25 Javascript
在HTML代码中使用JavaScript代码的例子
2014/10/16 Javascript
jQuery实现长按按钮触发事件的方法
2015/02/02 Javascript
JavaScript实现广告的关闭与显示效果实例
2015/07/02 Javascript
非常实用的12个jquery代码片段
2015/11/02 Javascript
jQuery实现网页顶部固定导航效果代码
2015/12/24 Javascript
Bootstrap table分页问题汇总
2016/05/30 Javascript
bootstrap栅格系统示例代码分享
2017/05/22 Javascript
vue根据进入的路由进行原路返回的方法
2018/09/26 Javascript
在mpvue框架中使用Vant WeappUI组件库的注意事项【推进】
2019/06/09 Javascript
vue-router二级导航切换路由及高亮显示的实现方法
2019/07/10 Javascript
Vue项目中使用WebUploader实现文件上传的方法
2019/07/21 Javascript
vue项目强制清除页面缓存的例子
2019/11/06 Javascript
es6中class类静态方法,静态属性,实例属性,实例方法的理解与应用分析
2020/02/15 Javascript
vue 数据操作相关总结
2020/12/17 Vue.js
Python线程中对join方法的运用的教程
2015/04/09 Python
梅尔倒谱系数(MFCC)实现
2019/06/19 Python
Django如何使用jwt获取用户信息
2020/04/21 Python
Django视图、传参和forms验证操作
2020/07/15 Python
Python 忽略文件名编码的方法
2020/08/01 Python
使用AJAX和Django获取数据的方法实例
2020/10/25 Python
塔吉特百货公司官网:Target
2017/04/27 全球购物
施华洛世奇加拿大官网:SWAROVSKI加拿大
2018/06/03 全球购物
LN-CC中国:高端男装和女装的奢侈时尚目的地
2019/09/14 全球购物
NICKIS.com荷兰:设计师儿童时装
2020/01/08 全球购物
大学生饮食连锁店创业计划书
2014/01/17 职场文书
大学迎新晚会主持词
2014/03/24 职场文书
离婚协议书样本
2015/01/26 职场文书
导游词之无锡丝业博物馆
2019/11/12 职场文书