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 小练习(实例代码)
Aug 07 Javascript
JSON 数据格式介绍
Jan 13 Javascript
灵活应用js调试技巧解决样式问题的步骤分享
Mar 15 Javascript
基于JQuery的多标签实现代码
Sep 19 Javascript
深入解析contentWindow, contentDocument
Jul 04 Javascript
图片旋转、鼠标滚轮缩放、镜像、切换图片js代码
Dec 13 Javascript
js实现为a标签添加事件的方法(使用闭包循环)
Aug 02 Javascript
使用JQuery选择HTML遍历函数的方法
Sep 17 Javascript
Javascript中常用的检测方法小结
Oct 08 Javascript
javascript实现多张图片左右无缝滚动效果
Mar 22 Javascript
详解Vue结合后台的列表增删改案例
Aug 21 Javascript
在layui中layer弹出层点击事件无效的解决方法
Sep 05 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
亚洲咖啡有什么?亚洲咖啡产地介绍 亚洲咖啡有什么特点?
2021/03/05 新手入门
发挥语言的威力--融合PHP与ASP
2006/10/09 PHP
php5新改动之短标记启用方法
2008/09/11 PHP
IIS7.X配置PHP运行环境小结
2011/06/09 PHP
php 解压rar文件及zip文件的方法
2014/05/05 PHP
php+mysql查询实现无限下级分类树输出示例
2016/10/03 PHP
PHP使用file_get_contents发送http请求功能简单示例
2018/04/29 PHP
thinkPHP5框架实现基于ajax的分页功能示例
2018/06/12 PHP
PHP实现一个轻量级容器的方法
2019/01/28 PHP
在网页中屏蔽快捷键
2006/09/06 Javascript
Expandable &quot;Detail&quot; Table Rows
2007/08/29 Javascript
JS 动态加载脚本的4种方法
2009/05/05 Javascript
jQuery 实现自动填充邮箱功能(带下拉提示)
2014/10/14 Javascript
JavaScript日期类型的一些用法介绍
2015/03/02 Javascript
jquery 实现输入邮箱时自动补全下拉提示功能
2015/10/04 Javascript
js实现非常棒的弹出div
2016/10/06 Javascript
JavaScript中数组的各种操作的总结(必看篇)
2017/02/13 Javascript
JS实现的五级联动菜单效果完整实例
2017/02/23 Javascript
dropload.js插件下拉刷新和上拉加载使用详解
2017/10/20 Javascript
详解使用Next.js构建服务端渲染应用
2018/07/10 Javascript
vue-swiper的使用教程
2018/08/30 Javascript
fetch 如何实现请求数据
2018/12/20 Javascript
Promise扫盲贴
2019/06/24 Javascript
JS计算斐波拉切代码实例
2019/09/12 Javascript
在微信小程序中渲染HTML内容3种解决方案及分析与问题解决
2020/01/12 Javascript
详解python中递归函数
2019/04/16 Python
python实现从wind导入数据
2019/12/03 Python
Python实现自动签到脚本的示例代码
2020/08/19 Python
介绍CSS3使用技巧5个
2009/04/02 HTML / CSS
Html5移动端弹幕动画实现示例代码
2018/08/27 HTML / CSS
日本热销NO.1胶原蛋白冻:Aishitoto爱希特多
2019/06/20 全球购物
What is the purpose of Void class? Void类的作用是什么?
2016/10/31 面试题
"火柴棍式"程序员面试题
2014/03/16 面试题
高一数学教学反思
2014/02/07 职场文书
家居装修公司创业计划书范文
2014/03/20 职场文书
春节联欢晚会主持词
2014/03/24 职场文书