详解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 自动分号插入(JavaScript synat:auto semicolon insertion)
Nov 04 Javascript
jquery 获取 outerHtml 包含当前节点本身的代码
Oct 30 Javascript
js中数组排序sort方法的原理分析
Nov 20 Javascript
jQuery不兼容input的change事件问题解决过程
Dec 05 Javascript
jQuery中unwrap()方法用法实例
Jan 16 Javascript
JS实现带关闭功能的阿里妈妈网站顶部滑出banner工具条代码
Sep 17 Javascript
创建自己的jquery表格插件
Nov 25 Javascript
详谈js对url进行编码和解码(三种方式的区别)
Aug 16 Javascript
小程序实现选择题选择效果
Nov 04 Javascript
跨域解决之JSONP和CORS的详细介绍
Nov 21 Javascript
angular4自定义表单控件[(ngModel)]的实现
Nov 23 Javascript
vue.js watch经常失效的场景与解决方案
Jan 07 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实现aes加密类分享
2014/02/16 PHP
Yii2.0中的COOKIE和SESSION用法
2016/08/12 PHP
php 自定义错误日志实例详解
2016/11/12 PHP
Jquery中使用setInterval和setTimeout的方法
2013/04/08 Javascript
jQuery动画效果-fadeIn fadeOut淡入浅出示例代码
2013/08/28 Javascript
JQuery操作iframe父页面与子页面的元素与方法(实例讲解)
2013/11/20 Javascript
jQuery中height()方法用法实例
2014/12/24 Javascript
jQuery实现美观的多级动画效果菜单代码
2015/09/06 Javascript
深入理解Angular2 模板语法
2016/08/07 Javascript
浅谈bootstrap使用中的一些问题以及解决过程
2016/10/18 Javascript
Node.js的特点详解
2017/02/03 Javascript
Bootstrap DateTime Picker日历控件简单应用
2017/03/25 Javascript
vue+SSM实现验证码功能
2018/12/07 Javascript
为什么要使用Vuex的介绍
2019/01/19 Javascript
借助云开发实现小程序短信验证码的发送
2020/01/06 Javascript
解决微信小程序scroll-view组件无横向滚动的问题
2020/02/04 Javascript
[50:58]2018DOTA2亚洲邀请赛3月29日 小组赛A组OpTic VS Newbee
2018/03/30 DOTA
Django中STATIC_ROOT和STATIC_URL及STATICFILES_DIRS浅析
2018/05/08 Python
python dataframe向下向上填充,fillna和ffill的方法
2018/11/28 Python
在Python 不同级目录之间模块的调用方法
2019/01/19 Python
django框架事务处理小结【ORM 事务及raw sql,customize sql 事务处理】
2019/06/27 Python
python系统指定文件的查找只输出目录下所有文件及文件夹
2020/01/19 Python
postman和python mock测试过程图解
2020/02/22 Python
Python爬虫入门教程02之笔趣阁小说爬取
2021/01/24 Python
python单例模式的应用场景实例讲解
2021/02/24 Python
香港草莓网土耳其网站:Strawberrynet TR
2017/03/02 全球购物
耐克亚太地区:Nike APAC
2019/12/07 全球购物
计算机专业大学生的自我评价
2013/11/14 职场文书
主持人演讲稿范文
2013/12/28 职场文书
人事专员的职责
2014/02/26 职场文书
私人会所最新创业计划书范文
2014/03/24 职场文书
奉献爱心演讲稿
2014/09/04 职场文书
群众路线自查报告及整改措施
2014/11/04 职场文书
2014年图书馆工作总结
2014/11/25 职场文书
导游词之宁夏贺兰山岩画
2019/11/08 职场文书
在 SQL 语句中处理 NULL 值的方法
2021/06/07 SQL Server