详解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 相关文章推荐
用js实现多域名不同文件的调用方法
Jan 12 Javascript
AeroWindow 基于JQuery的弹出窗口插件
Jun 27 Javascript
eval的两组性能测试数据
Aug 17 Javascript
js显示时间 js显示最后修改时间
Jan 02 Javascript
JavaScript实现检查页面上的广告是否被AdBlock屏蔽了的方法
Nov 03 Javascript
详解JavaScript的策略模式编程
Jun 24 Javascript
javascript生成随机数方法汇总
Nov 12 Javascript
微信小程序 开发之快递查询功能的实现
Jan 09 Javascript
JavaScript中的toString()和toLocaleString()方法的区别
Feb 15 Javascript
JavaScript验证知识整理
Mar 24 Javascript
js字符串处理之绝妙的代码
Apr 05 Javascript
javascript删除数组元素的七个方法示例
Sep 09 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/07/17 PHP
浅析Yii中使用RBAC的完全指南(用户角色权限控制)
2013/06/20 PHP
php调用google接口生成二维码示例
2014/04/28 PHP
php获得文件大小和文件创建时间的方法
2015/03/13 PHP
用js实现下载远程文件并保存在本地的脚本
2008/05/06 Javascript
利用JQuery+EasyDrag 实现弹出可拖动的Div,同时向Div传值,然后返回Div选中的值
2009/10/24 Javascript
JavaScript对象之间的转换 jQuery对象和原声DOM
2011/03/07 Javascript
jquery 操作日期、星期、元素的追加的实现代码
2012/02/07 Javascript
js中如何把字符串转化为对象、数组示例代码
2013/07/17 Javascript
兼容FF和IE的动态table示例自写
2013/10/21 Javascript
html的DOM中Event对象onabort事件用法实例
2015/01/21 Javascript
JQuery鼠标移到小图显示大图效果的方法
2015/06/10 Javascript
星期几的不同脚本写法(推荐)
2016/06/01 Javascript
JQuery ZTree使用方法详解
2017/01/07 Javascript
JS操作xml对象转换为Json对象示例
2017/03/25 Javascript
Angularjs中使用轮播图指令swiper
2017/05/30 Javascript
jquery 键盘事件的使用方法详解
2017/09/13 jQuery
Vue下路由History模式打包后页面空白的解决方法
2018/06/29 Javascript
5分钟快速掌握JS中var、let和const的异同
2018/09/19 Javascript
深入理解JavaScript 中的执行上下文和执行栈
2018/10/23 Javascript
vue2.0实现的tab标签切换效果(内容可自定义)示例
2019/02/11 Javascript
微信小程序如何自定义table组件
2019/06/29 Javascript
使用eslint和githooks统一前端风格的技巧
2020/07/29 Javascript
Python入门篇之字典
2014/10/17 Python
快速排序的四种python实现(推荐)
2019/04/03 Python
网易2016研发工程师编程题 奖学金(python)
2019/06/19 Python
Python使用matplotlib 模块scatter方法画散点图示例
2019/09/27 Python
PyCharm2019安装教程及其使用(图文教程)
2019/09/29 Python
Python importlib模块重载使用方法详解
2020/10/13 Python
Python基于tkinter canvas实现图片裁剪功能
2020/11/05 Python
Nordgreen英国官网:斯堪的纳维亚设计师手表
2018/10/24 全球购物
业务员自荐信范文
2014/04/20 职场文书
城市规划应届生推荐信
2014/09/08 职场文书
党员群众路线教育实践活动学习笔记
2014/11/05 职场文书
golang通过递归遍历生成树状结构的操作
2021/04/28 Golang
Python时间操作之pytz模块使用详解
2022/06/14 Python