详解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中将字符串转换成json的三种方式
Jan 12 Javascript
jquery遍历select元素(实例讲解)
Dec 31 Javascript
jQuery对下拉框,单选框,多选框的操作
Feb 21 Javascript
Javascript模块化编程详解
Dec 01 Javascript
js 实现数值的千分位及保存小数方法(推荐)
Aug 01 Javascript
React进阶学习之组件的解耦之道
Aug 07 Javascript
JS实现网页抢购功能(触发,终止脚本)
Nov 27 Javascript
JavaScript实现的DOM树遍历方法详解【二叉DOM树、多叉DOM树】
May 07 Javascript
JS 数组基本用法入门示例解析
Jan 16 Javascript
js模拟实现烟花特效
Mar 10 Javascript
js+css实现扇形导航效果
Aug 18 Javascript
使用Cargo工具高效创建Rust项目
Aug 14 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简单判断字符串是否包含另一个字符串的方法
2016/03/25 PHP
PHP 中常量的知识整理
2017/04/14 PHP
农历与西历对照
2006/09/06 Javascript
Js 本页面传值实现代码
2009/05/17 Javascript
jquery中交替点击事件的实现代码
2014/02/14 Javascript
jQuery基础知识小结
2014/12/22 Javascript
javascript实现rgb颜色转换成16进制格式
2015/07/10 Javascript
JS实现点击按钮控制Div变宽、增高及调整背景色的方法
2015/08/05 Javascript
JavaScript高级程序设计(第三版)学习笔记1~5章
2016/03/11 Javascript
JavaScript生成.xls文件的代码
2016/12/22 Javascript
vue-cli3全面配置详解
2018/11/14 Javascript
this在vue和小程序中的使用详解
2019/01/28 Javascript
JS前端知识点offset,scroll,client,冒泡,事件对象的应用整理总结
2019/06/27 Javascript
浅谈vue中$event理解和框架中在包含默认值外传参
2020/08/07 Javascript
解决在Vue中使用axios POST请求变成OPTIONS的问题
2020/08/14 Javascript
JavaScript十大取整方法实例教程
2020/12/03 Javascript
Python中unittest模块做UT(单元测试)使用实例
2015/06/12 Python
python实现人脸识别经典算法(一) 特征脸法
2018/03/13 Python
Go/Python/Erlang编程语言对比分析及示例代码
2018/04/23 Python
解决python 无法加载downsample模型的问题
2018/10/25 Python
详解配置Django的Celery异步之路踩坑
2018/11/25 Python
python读取当前目录下的CSV文件数据
2020/03/11 Python
欧洲有机婴儿食品最大的市场:Organic Baby Food(供美国和加拿大)
2018/03/28 全球购物
澳大利亚优质的家居用品和生活方式公司:Bed Bath N’ Table
2019/04/16 全球购物
荷兰天然和有机产品网上商城:BigGreenSmile.nl
2020/07/26 全球购物
比较基础的php面试题及答案-填空题
2014/04/26 面试题
英智兴达软件测试笔试题
2016/10/12 面试题
挂靠协议书范本
2014/04/22 职场文书
C++程序员求职信
2014/05/07 职场文书
夫妻分居协议书范本
2014/11/28 职场文书
小王子读书笔记
2015/06/29 职场文书
MySQL复制问题的三个参数分析
2021/04/07 MySQL
ztree+ajax实现文件树下载功能
2021/05/18 Javascript
Python面向对象之成员相关知识总结
2021/06/24 Python
mysql的Buffer Pool存储及原理
2022/04/02 MySQL
springboot读取resources下文件的方式详解
2022/06/21 Java/Android