详解Vue.js分发之作用域槽


Posted in Javascript onJune 13, 2017

首先,需要知道的是,每个组件有每个组件自己的作用域。每个组件都是Vue()的实例,有自己的作用域。

比如现在有个组件这样的:

Vue.component('father-component1',{
  template:'<div class="father"><p>Hi,我是父组件</p>{{fatherMessage}}</div>',
  data:function(){
   return {
     fatherMessage:'这是父组件发出的消息哦~'
   }
  },
});

这个data只为template里的模板服务。同样的,子组件的data只为子组件的模板服务。因为他们都是各自作用域内的属性。

在slot分发中,无论是单分发还是具名分发,都是父组件替换子组件的数据,或者没有替换,用子组件默认的数据。两者并不能共存。这样他们就没有数据联系了。

但是通过设置作用域槽,就可以改变这种状况,让子组件可以在父组件进行分发时获取自己的数据,至于是什么数据,由子组件决定,这样就能解耦了。

作用域槽通过slot的一个自定义的属性,官方给出的DEMO是text,但也可以是其他,值为暴露的数据。

这个自定义属性已经存放在子组件的prop对象里了。等待着被父组件获取。

怎么获取呢?

在父组件的模板里,使用一个Vue自带的特殊组件<template> ,并在该组件上使用scope属性,值是一个临时的变量,存着的是由子组件传过来的prop对象,在下面的例子中我把他命名为props。

获得由子传过来的prop对象。这时候,父组件就可以访问子组件在自定义属性上暴露的数据了。

//js
Vue.component('child-component4',{
  template:'<ul>' +
  '<slot name="child-ul" v-for="item in fruit" v-bind:text="item.name">?</slot>' +
  '</ul>',
  data:function(){
   return {
     fruit:[
       {name:'苹果'},
       {name:'香蕉'},
       {name:'橙子'}
     ]
   }
  },
});
Vue.component('father-component4',{
  template:'<child-component4>' +
  '<template scope="props" slot="child-ul">' +
  '<li class="child-li" >{{props.text}}</li>' +
  '</template>' +
  '</child-component4>'
});
var app16 = new Vue({
  el:'#app16'
});
<div id="app16">
  <father-component4></father-component4>
</div>

以上的的组件组合会被渲染为:

<div id="app16">
<ul>
  <li class="child-li">苹果</li>
  <li class="child-li">香蕉</li>
  <li class="child-li">橙子</li>
</ul>
</div>

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持三水点靠木。

Javascript 相关文章推荐
js定时器怎么写?就是在特定时间执行某段程序
Oct 11 Javascript
js数组转json并在后台对其解析具体实现
Nov 20 Javascript
jQuery动态显示和隐藏datagrid中的某一列的方法
Dec 11 Javascript
使用jquery获取url以及jquery获取url参数的实现方法
May 25 Javascript
jQuery实现点击查看大图并以弹框的形式居中
Aug 08 Javascript
jQuery Form插件使用详解_动力节点Java学院整理
Jul 17 jQuery
vue-router 导航钩子的具体使用方法
Aug 31 Javascript
Nuxt.js踩坑总结分享
Jan 18 Javascript
react-native滑动吸顶效果的实现过程
Jun 03 Javascript
vue.js购物车添加商品组件的方法
Sep 17 Javascript
vue+axios 拦截器实现统一token的案例
Sep 11 Javascript
Vue中使用import进行路由懒加载的原理分析
Apr 01 Vue.js
Javascript实现从小到大的数组转换成二叉搜索树
Jun 13 #Javascript
微信小程序实现移动端滑动分页效果(ajax)
Jun 13 #Javascript
详解AngularJs路由之Ui-router-resolve(预加载)
Jun 13 #Javascript
微信小程序动态显示项目倒计时效果
Jun 13 #Javascript
深究AngularJS之ui-router详解
Jun 13 #Javascript
微信小程序自定义导航隐藏和显示功能
Jun 13 #Javascript
深究AngularJS——ng-checked(回写:带真实案例代码)
Jun 13 #Javascript
You might like
php 常用类整理
2009/12/23 PHP
PHP制作3D扇形统计图以及对图片进行缩放操作实例
2014/10/23 PHP
给应用部分的js代码设定一个统一的入口
2014/06/15 Javascript
jquery图形密码实现方法
2015/03/11 Javascript
JavaScript各类型的关系图解
2015/10/16 Javascript
Bootstrap CSS布局之代码
2016/12/17 Javascript
关于前后端json数据的发送与接收详解
2017/07/30 Javascript
H5+C3+JS实现五子棋游戏(AI篇)
2020/05/28 Javascript
JS实现的字符串数组去重功能小结
2019/06/17 Javascript
ElementUI之Message功能拓展详解
2019/10/18 Javascript
[56:20]LGD vs VP Supermajor 败者组决赛 BO3 第三场 6.10
2018/07/04 DOTA
Python中装饰器兼容加括号和不加括号的写法详解
2017/07/05 Python
使用Python实现windows下的抓包与解析
2018/01/15 Python
python文件操作之批量修改文件后缀名的方法
2018/08/10 Python
Python3爬虫爬取百姓网列表并保存为json功能示例【基于request、lxml和json模块】
2018/12/05 Python
django一对多模型以及如何在前端实现详解
2019/07/24 Python
Django中的用户身份验证示例详解
2019/08/07 Python
Python解析多帧dicom数据详解
2020/01/13 Python
Python使用PyQt5/PySide2编写一个极简的音乐播放器功能
2020/02/07 Python
Python matplotlib画图时图例说明(legend)放到图像外侧详解
2020/05/16 Python
Django-Scrapy生成后端json接口的方法示例
2020/10/06 Python
python regex库实例用法总结
2021/01/03 Python
纯CSS3实现的8种Loading动画效果
2014/07/05 HTML / CSS
HTML5响应式(自适应)网页设计的实现
2017/11/17 HTML / CSS
亿阳信通股份有限公司C#笔试题
2016/12/06 面试题
英文简历中的自我评价用语
2013/12/09 职场文书
自我评价是什么
2014/01/04 职场文书
办公室人员先进事迹
2014/01/27 职场文书
扩大国家免疫规划实施方案
2014/03/21 职场文书
《青海高原一株柳》教学反思
2014/04/25 职场文书
校优秀毕业生主要事迹
2014/05/26 职场文书
大学生个人总结范文
2015/02/15 职场文书
陈斌强事迹观后感
2015/06/17 职场文书
幼儿园庆元旦主持词
2015/07/06 职场文书
php 获取音视频时长,PHP 利用getid3 获取音频文件时长等数据
2021/04/01 PHP
一文解答什么是MySQL的回表
2022/08/05 MySQL