详解Vue.js 作用域、slot用法(单个slot、具名slot)


Posted in Javascript onOctober 15, 2019

作用域

在介绍slot前,需要先知道一个概念:编译的作用域。比如父组件中有如下模板:

<child-component>
 {{message}}
<child-component>

这里的message就是一个slot,但是它绑定的是父组件的数据,而不是组件< child-component >的数据。

父组件模板的内容是在父组件作用域内编译,子组件模板的内容是在子组件作用域内编译。

<div id="app">
 <child-component v-show="showChild"></child-component>
</div>
<script>
 Vue.component('child-component',{
 template: '<div>子组件</div>'
 });

 var app = new Vue({
 el: '#app',
 data: {
  showChild: true
 }
 });
</script>

这里的状态showChild绑定的是父组件的数据,如果想在子组件上绑定,那应该是:

<div id="app">
 <child-component></child-component>
</div>
<script>
 Vue.component('child-component',{
 template: '<div v-show="showChild">子组件</div>',
 data: function () {
  showChild: true
 }
 });

 var app = new Vue({
 el: '#app'
 });
</script>

因此,slot分发的内容,作用域是在父组件上的。

slot用法

单个slot:

在子组件使用特殊的< slot >元素就可以为这个子组件开启一个 slot(插槽),在父组件模板里,插入在子组件标签内的所有内容将替代子组件的< slot >标签及它的内容。

<!DOCTYPE html>
<html lang="en">
<head>
 <meta charset="UTF-8">
 <meta name="viewport" content="width=device-width, initial-scale=1.0">
 <meta http-equiv="X-UA-Compatible" content="ie=edge">
 <script src="https://unpkg.com/vue/dist/vue.js"></script>
 <title>单个slot</title>
</head>
<body>
 <div id="app">
 <cild-component>
  <p>分发的内容</p>
  <p>更多分发的内容</p>
 </cild-component>
 </div>
 <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共存。

<div id="myApp">
 <child-component>
 <h2 slot="header">标题</h2>
 <p>正文内容</p>
 <p>更多的正文内容</p>
 <div slot="footer">底部信息</div>
 </child-component>
</div>
<script>
 Vue.component('child-component',{
 template: '\
  <div class="container">\
  <div class="header">\
   <slot name="header"></slot>\
  </div>\
  <div class="main">\
   <slot></slot>\
  </div>\
  <div class="footer">\
   <slot name="footer"></slot>\
  </div>\
  </div>'
 });

 var myApp = new Vue({
 el: '#myApp'
 });
</script>

子组件内声明了3个< slot >元素,其中在< div class=“main” > 内的 < slot >没有使用name特性,它将作为默认slot出现,父组件没有使用slot特性的元素与内容都将出现在这里。

如果没有制定默认的匿名slot,父组件内多于的内容片断都将被抛弃。

渲染结果:

<div class="container">
 <div class="header">
 <h2>标题</h2>
 </div>
 <div class="main">
 <p>正文内容</p>
 <p>更多的正文内容</p>
 </div>
 <div class="footer">
 <div slot="footer">底部信息</div>
 </div>
</div>

总结

以上所述是小编给大家介绍的Vue.js 作用域、slot用法(单个slot、具名slot),希望对大家有所帮助,如果大家有任何疑问请给我留言,小编会及时回复大家的。在此也非常感谢大家对三水点靠木网站的支持!
如果你觉得本文对你有帮助,欢迎转载,烦请注明出处,谢谢!

Javascript 相关文章推荐
图标线性回归斜着移动到指定的位置
Aug 16 Javascript
js清除input中type等于file的值域(示例代码)
Dec 24 Javascript
在JavaScript里防止事件函数高频触发和高频调用的方法
Sep 06 Javascript
jQuery插件jFade实现鼠标经过的图片高亮其它变暗
Mar 14 Javascript
jfinal与bootstrap的登录跳转实战演习
Sep 22 Javascript
浅谈JSON.stringify()和JOSN.parse()方法的不同
Aug 29 Javascript
Bootstrap Table从服务器加载数据进行显示的实现方法
Sep 29 Javascript
jquery实现页面加载效果
Feb 21 Javascript
Node.js+ES6+dropload.js实现移动端下拉加载实例
Jun 01 Javascript
jQuery判断网页是否已经滚动到浏览器底部的实现方法
Oct 27 jQuery
JS随机数产生代码分享
Feb 24 Javascript
移动端图片上传旋转、压缩问题的方法
Oct 16 Javascript
vue vantUI实现文件(图片、文档、视频、音频)上传(多文件)
Oct 15 #Javascript
ES6中let、const的区别及变量的解构赋值操作方法实例分析
Oct 15 #Javascript
vue使用@scroll监听滚动事件时,@scroll无效问题的解决方法详解
Oct 15 #Javascript
vue实现树形结构样式和功能的实例代码
Oct 15 #Javascript
谈谈IntersectionObserver懒加载的具体使用
Oct 15 #Javascript
js实现开关灯效果
Mar 30 #Javascript
JS实现灯泡开关特效
Mar 30 #Javascript
You might like
PHP求最大子序列和的算法实现
2011/06/24 PHP
基于PHP给大家讲解防刷票的一些技巧
2015/11/18 PHP
Kindeditor编辑器添加图片上传水印功能(php代码)
2017/08/03 PHP
IE之动态添加DOM节点触发window.resize事件
2010/07/27 Javascript
Javascript在IE和FireFox中的不同表现简析
2012/12/03 Javascript
JQuery工具函数汇总
2015/06/15 Javascript
jQuery根据用户电脑是mac还是pc加载对应样式的方法
2015/06/26 Javascript
每天一篇javascript学习小结(面向对象编程)
2015/11/20 Javascript
JavaScript的设计模式经典之建造者模式
2016/02/24 Javascript
javascript和jquery实现用户登录验证
2016/05/04 Javascript
JavaScript给每一个li节点绑定点击事件的实现方法
2016/12/01 Javascript
关于javascript作用域的常见面试题分享
2017/06/18 Javascript
JavaScript实现打印星型金字塔功能实例分析
2017/09/27 Javascript
vue 开发一个按钮组件的示例代码
2018/03/27 Javascript
微信小程序 腾讯地图显示偏差问题解决
2019/07/27 Javascript
Vue使用NProgress进度条的方法
2019/09/21 Javascript
jQuery单页面文字搜索插件jquery.fullsearch.js的使用方法
2020/02/04 jQuery
使用PDB简单调试Python程序简明指南
2015/04/25 Python
git进行版本控制心得详谈
2017/12/10 Python
使用python爬取抖音app视频的实例代码
2020/12/01 Python
利用HTML5 Canvas制作键盘及鼠标动画的实例分享
2016/03/15 HTML / CSS
Bootstrap File Input文件上传组件
2020/12/01 HTML / CSS
凯伦·米莲女装网上商店:Karen Millen
2017/11/07 全球购物
super关键字的用法
2012/04/10 面试题
2014三八妇女节活动总结范文四篇
2014/03/09 职场文书
年度考核自我鉴定
2014/03/19 职场文书
奠基仪式主持词
2014/03/20 职场文书
公司副总经理任命书
2014/06/05 职场文书
欢迎家长标语
2014/10/08 职场文书
2014年学校禁毒工作总结
2014/12/23 职场文书
优秀班集体事迹材料
2014/12/25 职场文书
法院执行局工作总结
2015/08/11 职场文书
Python如何配置环境变量详解
2021/05/18 Python
利用Python多线程实现图片下载器
2022/03/25 Python
Oracle中DBLink的详细介绍
2022/04/29 Oracle
python中pycryto实现数据加密
2022/04/29 Python