详解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 时间显示效果代码
Aug 23 Javascript
js实现在页面上弹出蒙板技巧简单实用
Apr 16 Javascript
js中的referrer返回上一页使用介绍
Sep 26 Javascript
类似天猫商品详情随浏览器移动的示例代码
Feb 27 Javascript
JS实现的一个简单的Autocomplete自动完成例子
Apr 16 Javascript
浅析javascript 定时器
Dec 23 Javascript
基于Flowplayer打造一款免费的WEB视频播放器附源码
Sep 06 Javascript
AngularJs html compiler详解及示例代码
Sep 01 Javascript
Vue.js计算机属性computed和methods方法详解
Oct 12 Javascript
使用pkg打包ThinkJS项目的方法步骤
Dec 30 Javascript
webpack 如何同时输出压缩和未压缩的文件的实现步骤
Jun 05 Javascript
JS实现斐波那契数列的五种方式(小结)
Sep 09 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
apache+mysql+php+ssl服务器之完全安装攻略
2006/09/05 PHP
PHP使用递归算法无限遍历数组示例
2017/01/13 PHP
浅谈laravel-admin form中的数据,在提交后,保存前,获取并进行编辑
2019/10/21 PHP
jQuery ajax(复习)—Baidu ajax request分离版
2013/01/24 Javascript
基于IE下ul li 互相嵌套时的bug,排查,解决过程以及心得介绍
2013/05/07 Javascript
js判断选择的时间是否大于今天的代码
2013/08/20 Javascript
轻松学习jQuery插件EasyUI EasyUI创建树形菜单
2015/11/30 Javascript
第十章之巨幕页头缩略图与警告框组件
2016/04/25 Javascript
jQuery实现图片轮播效果代码(基于jquery.pack.js插件)
2016/06/02 Javascript
node.js 和HTML5开发本地桌面应用程序
2016/12/13 Javascript
关于 angularJS的一些用法
2017/11/29 Javascript
解决Vue使用swiper动态加载数据,动态轮播数据显示白屏的问题
2018/09/27 Javascript
在Vant的基础上封装下拉日期控件的代码示例
2018/12/05 Javascript
使用Bootstrap做一个朝代历史表
2019/12/10 Javascript
vue cli3适配所有端方案的实现
2020/04/13 Javascript
python实现ipsec开权限实例
2014/11/11 Python
Python爬虫模拟登录带验证码网站
2016/01/22 Python
详解Python中的正则表达式
2018/07/08 Python
Python实现繁体中文与简体中文相互转换的方法示例
2018/12/18 Python
Python面向对象程序设计示例小结
2019/01/30 Python
python celery分布式任务队列的使用详解
2019/07/08 Python
python脚本后台执行方式
2019/12/21 Python
tensorflow保持每次训练结果一致的简单实现
2020/02/17 Python
Pyecharts 动态地图 geo()和map()的安装与用法详解
2020/03/25 Python
python能否java成为主流语言吗
2020/06/22 Python
如何利用python检测图片是否包含二维码
2020/10/15 Python
香港礼品网站:GiftU eshop
2017/09/01 全球购物
"引用"与多态的关系
2013/02/01 面试题
EJB包括(SessionBean,EntityBean)说出他们的生命周期,及如何管理事务的
2015/07/24 面试题
服装店营销方案
2014/03/10 职场文书
大学生村官驻村工作心得体会
2016/01/23 职场文书
教师纪律作风整顿心得体会
2016/01/23 职场文书
导游词之岳阳楼
2019/09/25 职场文书
写一个Python脚本自动爬取Bilibili小视频
2021/04/24 Python
SpringBoot 拦截器妙用你真的了解吗
2021/07/01 Java/Android
【海涛解说】pis亲自推荐,其实你从来不会玩NW
2022/04/01 DOTA