详解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 相关文章推荐
零基础学JavaScript最新动画教程+iso光盘下载
Jan 22 Javascript
JS OOP包机制,类创建的方法定义
Nov 02 Javascript
一看就懂:jsonp详解
Jun 01 Javascript
逐一介绍Jquery data()、Jquery stop()、jquery delay()函数(详)
Nov 04 Javascript
浅析JavaScript访问对象属性和方法及区别
Nov 16 Javascript
jQuery 全选 全不选 事件绑定的实现代码
Jan 23 Javascript
详解Angular中的自定义服务Service、Provider以及Factory
Apr 22 Javascript
Vue验证码60秒倒计时功能简单实例代码
Jun 22 Javascript
js中apply()和call()的区别与用法实例分析
Aug 14 Javascript
vue-swiper的使用教程
Aug 30 Javascript
解决vue安装less报错Failed to compile with 1 errors的问题
Oct 22 Javascript
用vue设计一个日历表
Dec 03 Vue.js
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 页面编码声明方法详解(header或meta)
2010/03/12 PHP
php比较多维数组中值的大小排序实现代码
2012/09/08 PHP
基于PHP常用字符串的总结(待续)
2013/06/07 PHP
ThinkPHP中的常用查询语言汇总
2014/08/22 PHP
php实现mysql备份恢复分卷处理的方法
2014/12/26 PHP
smarty模板引擎从php中获取数据的方法
2015/01/22 PHP
asp批量修改记录的代码
2008/06/25 Javascript
IE bug table元素的innerHTML
2010/01/11 Javascript
jquery实现的超出屏幕时把固定层变为定位层的代码
2010/02/23 Javascript
JS 控制小数位数的实现代码
2011/08/02 Javascript
js 验证身份证信息有效性
2014/03/28 Javascript
JavaScript判断字符长度、数字、Email、电话等常用判断函数分享
2015/04/01 Javascript
javascript比较语义化版本号的实现代码
2016/09/09 Javascript
基于Node.js + WebSocket打造即时聊天程序嗨聊
2016/11/29 Javascript
Bootbox将后台JSON数据填充Form表单的实例代码
2018/09/10 Javascript
JS 封装父页面子页面交互接口的实例代码
2019/06/25 Javascript
Nodejs监听日志文件的变化的过程解析
2019/08/04 NodeJs
js键盘事件实现人物的行走
2020/01/17 Javascript
axios解决高并发的方法:axios.all()与axios.spread()的操作
2020/11/09 Javascript
Django日志模块logging的配置详解
2017/02/14 Python
Python批量合并有合并单元格的Excel文件详解
2018/04/05 Python
python 去除txt文本中的空格、数字、特定字母等方法
2018/07/24 Python
Django外键(ForeignKey)操作以及related_name的作用详解
2019/07/29 Python
python如何基于redis实现ip代理池
2020/01/17 Python
CSS3中currentColor关键字的妙用
2016/02/27 HTML / CSS
Myprotein西班牙官网:欧洲第一大运动营养品牌
2020/02/24 全球购物
汉米尔顿手表官网:Hamilton
2020/09/13 全球购物
Linux不知道文件后缀名怎么判断文件类型
2012/04/26 面试题
产品工艺师的岗位职责
2013/11/15 职场文书
大学团支书的自我评价分享
2013/12/14 职场文书
个人贷款担保书
2014/04/01 职场文书
同学聚会祝酒词
2015/08/10 职场文书
详解TypeScript中的类型保护
2021/04/29 Javascript
Django+Celery实现定时任务的示例
2021/06/23 Python
关于python爬虫应用urllib库作用分析
2021/09/04 Python
Python中的tkinter库简单案例详解
2022/01/22 Python