详解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类中的公有变量和私有变量
Jul 24 Javascript
关于jquery.validate1.9.0前台验证的使用介绍
Apr 26 Javascript
javascript自然分类法算法实现代码
Oct 11 Javascript
javascript新建标签,判断键盘输入,以及判断焦点(示例代码)
Nov 25 Javascript
Node.js 文件夹目录结构创建实例代码
Jul 08 Javascript
详解node.js平台下Express的session与cookie模块包的配置
Apr 26 Javascript
React BootStrap用户体验框架快速上手
Mar 06 Javascript
详解Webpack-dev-server的proxy用法
Sep 08 Javascript
vue微信分享的实现(在当前页面分享其他页面)
Apr 16 Javascript
JS中比Switch...Case更优雅的多条件判断写法
Sep 05 Javascript
javascript实现摄像头拍照预览
Sep 30 Javascript
介绍一下28个JS常用数组方法
May 06 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抓即时股票信息
2006/10/09 PHP
Yii使用ajax验证显示错误messagebox的解决方法
2014/12/03 PHP
php中header跳转使用include包含解决参数丢失问题
2015/05/08 PHP
CentOS系统中PHP安装扩展的方式汇总
2017/04/09 PHP
laravel5.5添加echarts实现画图功能的方法
2019/10/09 PHP
laravel框架select2多选插件初始化默认选中项操作示例
2020/02/18 PHP
PHP设计模式(一)工厂模式Factory实例详解【创建型】
2020/05/02 PHP
Javascript写了一个清除“logo1_.exe”的杀毒工具(可扫描目录)
2007/02/09 Javascript
JavaScript高级程序设计(第3版)学习笔记7 js函数(上)
2012/10/11 Javascript
如何判断微信内置浏览器(通过User Agent实现)
2014/09/01 Javascript
JavaScript实现获取dom中class的方法
2015/02/09 Javascript
JS点击链接后慢慢展开隐藏着图片的方法
2015/02/17 Javascript
浅析JavaScript中的事件机制
2015/06/04 Javascript
Jquery和JS获取ul中li标签的实现方法
2016/06/02 Javascript
Bootstrap基本组件学习笔记之下拉菜单(7)
2016/12/07 Javascript
基于jQuery实现滚动刷新效果
2017/01/09 Javascript
JavaScript基本类型值-Number类型
2017/02/24 Javascript
原生JS上传大文件显示进度条 php上传文件代码
2020/03/27 Javascript
详解给Vue2路由导航钩子和axios拦截器做个封装
2018/04/10 Javascript
通过封装scroll.js 获取滚动条的值
2018/07/13 Javascript
JavaScript实现图片放大镜效果
2019/06/27 Javascript
Vue Router 实现动态路由和常见问题及解决方法
2020/03/06 Javascript
用python实现的去除win下文本文件头部BOM的代码
2013/02/10 Python
Python根据区号生成手机号码的方法
2015/07/08 Python
深入解析Python中的变量和赋值运算符
2015/10/12 Python
python 计算数据偏差和峰度的方法
2019/06/29 Python
Django数据结果集序列化并展示实现过程
2020/04/22 Python
巧用CSS3 border实现图片遮罩效果代码
2012/04/09 HTML / CSS
详解HTML5中rel属性的prefetch预加载功能使用
2016/05/06 HTML / CSS
法国购买二手电子产品网站:Asgoodasnew
2020/03/27 全球购物
人事行政主管岗位职责
2013/12/22 职场文书
专题组织生活会方案
2014/06/15 职场文书
没有孩子的离婚协议书怎么写
2014/09/17 职场文书
2019森林防火宣传标语大全!
2019/07/03 职场文书
Python获取百度热搜的完整代码
2021/04/07 Python
Python selenium的这三种等待方式一定要会!
2021/06/10 Python