详解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 相关文章推荐
javascript 弹出窗口中是否显示地址栏的实现代码
Apr 14 Javascript
JQuery操作Select的Options的Bug(IE8兼容性视图模式)
Apr 21 Javascript
js创建元素(节点)示例
Jan 02 Javascript
jQuery遍历之next()、nextAll()方法使用实例
Nov 08 Javascript
js实现下拉框选择要显示图片的方法
Feb 16 Javascript
JS库之wow.js使用方法
Sep 14 Javascript
Three.js加载外部模型的教程详解
Nov 10 Javascript
vue实现在一个方法执行完后执行另一个方法的示例
Aug 25 Javascript
用 js 写一个 js 解释器过程详解
Aug 02 Javascript
Vue.js标签页组件使用方法详解
Oct 19 Javascript
js实现固定区域内的不重叠随机圆
Oct 24 Javascript
layui实现给某一列加点击事件
Oct 26 Javascript
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中的函数嵌套层数限制分析
2011/06/13 PHP
Array of country list in PHP with Zend Framework
2011/10/17 PHP
php图片处理函数获取类型及扩展名实例
2014/11/19 PHP
详解YII关联查询
2016/01/10 PHP
php利用header函数下载各种文件
2016/08/24 PHP
laravel框架查询数据集转为数组的两种方法
2019/10/10 PHP
PHP cookie与session会话基本用法实例分析
2019/11/18 PHP
JAVASCRIPT对象及属性
2007/02/13 Javascript
IE6图片加载的一个BUG解决方法
2010/07/13 Javascript
JavaScript设置首页和收藏页面的小例子
2013/11/11 Javascript
js+css实现的简单易用兼容好的分页
2013/12/30 Javascript
禁止页面刷新让F5快捷键及右键都无效
2014/01/22 Javascript
Jquery实现Div上下移动示例
2014/04/23 Javascript
jQuery实现仿路边灯箱广告图片轮播效果
2015/04/15 Javascript
jQuery实现美观的多级动画效果菜单代码
2015/09/06 Javascript
Javascript之图片的延迟加载的实例详解
2017/07/24 Javascript
前端必备插件之纯原生JS的瀑布流插件Macy.js
2017/11/22 Javascript
JQuery使用属性addClass、removeClass和toggleClass实现增加和删除类操作示例
2019/11/18 jQuery
javascript数组元素删除方法delete和splice解析
2019/12/09 Javascript
详解vue beforeEach 死循环问题解决方法
2020/02/25 Javascript
jQuery+css实现的点击图片放大缩小预览功能示例【图片预览 查看大图】
2020/05/29 jQuery
python自动化脚本安装指定版本python环境详解
2017/09/14 Python
简单了解python模块概念
2018/01/11 Python
python实现两个文件夹的同步
2019/08/29 Python
python模块导入的方法
2019/10/24 Python
解决python中的幂函数、指数函数问题
2019/11/25 Python
Django的ListView超详细用法(含分页paginate)
2020/05/21 Python
python 爬虫基本使用——统计杭电oj题目正确率并排序
2020/10/26 Python
纯CSS3单页切换导航菜单界面设计的简单实现
2016/08/16 HTML / CSS
Wallis官网:英国女装零售商
2020/01/21 全球购物
2014年感恩母亲演讲稿
2014/05/27 职场文书
群众路线个人对照检查材料2014
2014/09/26 职场文书
房屋财产继承协议书范本
2014/11/03 职场文书
社区党务工作总结2015
2015/05/19 职场文书
JavaScript如何优化逻辑判断代码详解
2021/06/08 Javascript
SQL Server中的游标介绍
2022/05/20 SQL Server