详解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 相关文章推荐
Save a File Using a File Save Dialog Box
Jun 18 Javascript
js模拟select下拉菜单控件的代码
May 08 Javascript
js中复制行和删除行的操作实例
Jun 25 Javascript
jquery中ajax使用error调试错误的方法
Feb 08 Javascript
如何改进javascript代码的性能
Apr 02 Javascript
JS随机调用指定函数的方法
Jul 01 Javascript
JS组件Bootstrap Select2使用方法解析
May 30 Javascript
jQuery Select下拉框操作小结(推荐)
Jul 22 Javascript
bootstrap配合Masonry插件实现瀑布式布局
Jan 18 Javascript
360doc网站不登录就无法复制内容的解决方法
Jan 27 Javascript
微信小程序云开发之新手环境配置
May 16 Javascript
微信小程序实现收货地址左滑删除
Nov 18 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生成随机码的思路与方法实例探索
2019/04/11 PHP
phpfpm的作用和用法
2019/10/10 PHP
修改jquery里的dialog对话框插件为框架页(iframe) 的方法
2010/09/14 Javascript
js中通过split函数分割字符串成数组小例子
2013/09/21 Javascript
JS简单实现登陆验证附效果图
2013/11/19 Javascript
js保留小数点后几位的写法
2014/01/03 Javascript
JavaScript中双叹号(!!)作用示例介绍
2014/04/10 Javascript
轻松创建nodejs服务器(2):nodejs服务器的构成分析
2014/12/18 NodeJs
jQuery图片渐变特效的简单实现
2016/06/25 Javascript
Vue.js表单控件实践
2016/10/27 Javascript
JS异步加载的三种实现方式
2017/03/16 Javascript
解决html-jquery/js引用外部图片时遇到看不了或出现403的问题
2017/09/22 jQuery
gulp安装以及打包合并的方法教程
2017/11/19 Javascript
解决Nodejs全局安装模块后找不到命令的问题
2018/05/15 NodeJs
了解在JavaScript中将值转换为字符串的5种方法
2019/06/06 Javascript
javascript如何使用函数random来实现课堂随机点名方法详解
2020/07/28 Javascript
微信小程序实现页面监听自定义组件的触发事件
2020/11/01 Javascript
django自定义Field实现一个字段存储以逗号分隔的字符串
2014/04/27 Python
Django静态资源URL STATIC_ROOT的配置方法
2014/11/08 Python
编写Python爬虫抓取豆瓣电影TOP100及用户头像的方法
2016/01/20 Python
windows10下python3.5 pip3安装图文教程
2018/04/02 Python
python如何进行矩阵运算
2020/06/05 Python
Python如何实现线程间通信
2020/07/30 Python
python 读取、写入txt文件的示例
2020/09/27 Python
Python尾递归优化实现代码及原理详解
2020/10/09 Python
L’AGENCE官网:加州女装品牌
2018/06/03 全球购物
Myprotein俄罗斯官网:欧洲第一运动营养品牌
2019/05/05 全球购物
管理专员自荐信
2014/01/26 职场文书
小学生期末评语
2014/04/21 职场文书
保研推荐信格式
2015/03/25 职场文书
2015年医院后勤工作总结
2015/05/20 职场文书
2016新教师培训心得体会范文
2016/01/08 职场文书
MySQL InnoDB ReplicaSet(副本集)简单介绍
2021/04/24 MySQL
MySQL中的布尔值,怎么存储false或true
2021/06/04 MySQL
游戏《铁拳》动画化!2022年年内播出
2022/03/21 日漫
Golang流模式之grpc的四种数据流
2022/04/13 Golang