详解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 相关文章推荐
jQuery 文本框得失焦点的简单实例
Feb 19 Javascript
jquery ajax请求方式与提示用户正在处理请稍等
Sep 01 Javascript
JS去除iframe滚动条的方法
Apr 01 Javascript
JavaScript创建对象的方式小结(4种方式)
Dec 17 Javascript
JavaScript隐式类型转换
Mar 15 Javascript
jQuery实现图像旋转动画效果
May 29 Javascript
jQuery实现checkbox列表的全选、反选功能
Nov 24 Javascript
详解Vue.js——60分钟组件快速入门(上篇)
Dec 05 Javascript
JS简单实现获取元素的封装操作示例
Apr 07 Javascript
Vue.js框架路由使用方法实例详解
Aug 25 Javascript
微信小程序实现选项卡功能
Jun 19 Javascript
Vue常用传值方式、父传子、子传父及非父子实例分析
Feb 24 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常用代码
2006/11/23 PHP
在字符串指定位置插入一段字符串的php代码
2010/02/16 PHP
使用PHP备份MySQL和网站发送到邮箱实例代码
2013/11/28 PHP
PHP文件大小格式化函数合集
2014/03/10 PHP
php魔术方法功能与用法实例分析
2016/10/19 PHP
浅谈PHP的$_SERVER[SERVER_NAME]
2017/02/04 PHP
不懂JavaScript应该怎样学
2008/04/16 Javascript
如何使Chrome控制台支持多行js模式——意外发现
2013/06/13 Javascript
动态加载dtree.js树treeview(示例代码)
2013/12/17 Javascript
jquery实现可点击伸缩与展开的菜单效果代码
2015/08/31 Javascript
浅谈js里面的InttoStr和StrtoInt
2016/06/14 Javascript
Bootstrap组件系列之福利篇几款好用的组件(推荐)
2016/06/23 Javascript
js实现右键自定义菜单
2016/12/03 Javascript
原生js实现无限循环轮播图效果
2017/01/20 Javascript
微信小程序技巧之show内容展示,上传文件编码问题
2017/01/23 Javascript
基于jQuery的表单填充实例
2017/08/22 jQuery
Three.js中网格对象MESH的属性与方法详解
2017/09/27 Javascript
页面点击小红心js实现代码
2018/05/26 Javascript
vue中使用mxgraph的方法实例代码详解
2019/05/17 Javascript
js 执行上下文和作用域的相关总结
2021/02/08 Javascript
python文件和目录操作方法大全(含实例)
2014/03/12 Python
Python中动态获取对象的属性和方法的教程
2015/04/09 Python
浅谈python脚本设置运行参数的方法
2018/12/03 Python
解决django前后端分离csrf验证的问题
2019/02/03 Python
python判断无向图环是否存在的示例
2019/11/22 Python
python3中sys.argv的实例用法
2020/04/24 Python
python3实现名片管理系统(控制台版)
2020/11/29 Python
python利用pytesseract 实现本地识别图片文字
2020/12/14 Python
一款纯css3实现的鼠标经过按钮特效教程
2014/11/09 HTML / CSS
CSS3自定义滚动条样式的示例代码
2017/08/21 HTML / CSS
HTML5新控件之日期和时间选择输入的实现代码
2018/09/13 HTML / CSS
HTML5 Canvas中绘制矩形实例
2015/01/01 HTML / CSS
校园学雷锋活动月总结
2014/03/09 职场文书
扬州个园导游词
2015/02/06 职场文书
PHP判断是否是json字符串
2021/04/01 PHP
《艾尔登法环》1.03.3补丁上线 碎星伤害调整
2022/04/06 其他游戏