详解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特殊字符转义介绍
Nov 05 Javascript
javascript间隔刷新的简单实例
Nov 14 Javascript
使用jQuery+EasyUI实现CheckBoxTree的级联选中特效
Dec 06 Javascript
JavaScript深度复制(deep clone)的实现方法
Feb 19 Javascript
老生常谈JavaScript 函数表达式
Sep 01 Javascript
详细总结Javascript中的焦点管理
Sep 17 Javascript
bootstrap中使用google prettify让代码高亮的方法
Oct 21 Javascript
微信小程序 progress组件详解及实例代码
Oct 25 Javascript
Javascript实现从小到大的数组转换成二叉搜索树
Jun 13 Javascript
Mongoose实现虚拟字段查询的方法详解
Aug 15 Javascript
关于JavaScript的单双引号嵌套问题
Aug 20 Javascript
NUXT SSR初级入门笔记(小结)
Dec 16 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 冒泡排序算法的实现代码
2010/08/08 PHP
关于session在PHP5的配置文件中的详细设置参数说明
2011/04/20 PHP
我也种棵OO树JXTree[js+css+xml]
2007/04/02 Javascript
Javascript下IE与Firefox下的差异兼容写法总结
2010/06/18 Javascript
js实现addClass,removeClass,hasClass的函数代码
2011/07/13 Javascript
基于Jquery实现的一个图片滚动切换
2012/06/21 Javascript
JS文本框默认值处理详解
2013/07/10 Javascript
浅析JavaScript声明变量
2015/12/21 Javascript
Web打印解决方案之普通报表打印功能
2016/08/29 Javascript
JS函数修改html的元素内容,及修改属性内容的方法
2016/10/28 Javascript
[原创]javascript typeof id==='string'?document.getElementById(id):id解释
2016/11/02 Javascript
浅谈键盘上回车按钮的js触发事件
2017/02/13 Javascript
jquery实现图片跟随鼠标的实例
2017/10/17 jQuery
详解vue-cli之webpack3构建全面提速优化
2017/12/25 Javascript
jquery的 filter()方法使用教程
2018/03/22 jQuery
vue-cli 3.0 版本与3.0以下版本在搭建项目时的区别详解
2018/12/11 Javascript
js删除对象中的某一个字段的方法实现
2021/01/11 Javascript
Python工程师面试题 与Python基础语法相关
2016/01/14 Python
使用Python多线程爬虫爬取电影天堂资源
2016/09/23 Python
一个基于flask的web应用诞生 组织结构调整(7)
2017/04/11 Python
Python数据可视化之画图
2019/01/15 Python
python3.6生成器yield用法实例分析
2019/08/23 Python
浅谈Python type的使用
2019/11/19 Python
解决Keras 与 Tensorflow 版本之间的兼容性问题
2020/02/07 Python
利用python绘制数据曲线图的实现
2020/04/09 Python
Selenium基于PIL实现拼接滚动截图
2020/04/10 Python
Python虚拟环境virtualenv创建及使用过程图解
2020/12/08 Python
Omio波兰:全欧洲低价大巴、火车和航班搜索和比价
2018/02/16 全球购物
美国伊甸园兄弟种子公司:Eden Brothers
2018/07/01 全球购物
UNIX命令速查表
2012/03/10 面试题
农民工创业典型事迹
2014/01/25 职场文书
医学专业职业生涯规划范文
2014/02/05 职场文书
实践单位评语
2014/04/26 职场文书
2014年团队工作总结
2014/11/24 职场文书
2015年环卫工作总结
2015/04/28 职场文书
2016年万圣节活动个人总结
2016/04/05 职场文书