详解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 相关文章推荐
Mozilla 表达式 __noSuchMethod__
Apr 05 Javascript
Google的跟踪代码 动态加载js代码方法应用
Nov 12 Javascript
页面图片浮动左右滑动效果的简单实现案例
Feb 10 Javascript
在JavaScript中重写jQuery对象的方法实例教程
Aug 25 Javascript
node.js中的fs.chown方法使用说明
Dec 16 Javascript
JS动态生成年份和月份实例代码
Feb 04 Javascript
详解Vue.js Mixins 混入使用
Sep 15 Javascript
vue实现压缩图片预览并上传功能(promise封装)
Jan 10 Javascript
微信小程序城市选择及搜索功能的方法
Mar 22 Javascript
js实现弹幕墙效果
Dec 10 Javascript
JavaScript实现手风琴效果
Feb 18 Javascript
详解Vue中$props、$attrs和$listeners的使用方法
Feb 18 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提取字符串中的图片地址[正则表达式]
2011/11/12 PHP
无刷新动态加载数据 滚动条加载适合评论等页面
2013/10/16 PHP
ThinkPHP实现二级循环读取的方法
2014/11/03 PHP
详解PHP原生DOM对象操作XML的方法
2016/10/17 PHP
laravel学习笔记之模型事件的几种用法示例
2017/08/15 PHP
IE事件对象(The Internet Explorer Event Object)
2012/06/27 Javascript
关于javascript中的typeof和instanceof介绍
2012/12/04 Javascript
THREE.JS入门教程(4)创建粒子系统
2013/01/24 Javascript
jQuery中siblings()方法用法实例
2015/01/08 Javascript
Jquery遍历Json数据的方法
2015/04/20 Javascript
在JavaScript中用getMinutes()方法返回指定的分时刻
2015/06/10 Javascript
JS非Alert实现网页右下角“未读信息”效果弹窗
2015/09/26 Javascript
JavaScript自学笔记(必看篇)
2016/06/23 Javascript
微信公众号 摇一摇周边功能开发
2016/12/08 Javascript
Vue系列:通过vue-router如何传递参数示例
2017/01/16 Javascript
JS实现颜色的10进制转化成rgba格式的方法
2017/09/04 Javascript
微信小程序使用Vant Weapp组件库的方法步骤
2019/08/01 Javascript
js实现倒计时秒杀效果
2020/03/25 Javascript
如何实现echarts markline标签名显示自己想要的
2020/07/20 Javascript
js实现3D旋转相册
2020/08/02 Javascript
基于vue实现微博三方登录流程解析
2020/11/04 Javascript
python中logging库的使用总结
2017/10/18 Python
pyQt4实现俄罗斯方块游戏
2018/06/26 Python
python程序控制NAO机器人行走
2019/04/29 Python
新手入门Python编程的8个实用建议
2019/07/12 Python
Python OrderedDict的使用案例解析
2019/10/25 Python
Python原始套接字编程实例解析
2020/01/29 Python
基于pytorch padding=SAME的解决方式
2020/02/18 Python
党校个人自我鉴定范文
2014/03/28 职场文书
个人公司授权委托书范本
2014/10/12 职场文书
护士2014年终工作总结
2014/11/11 职场文书
2015年简历自我评价范文
2015/03/11 职场文书
还在手动盖楼抽奖?教你用Python实现自动评论盖楼抽奖(一)
2021/06/07 Python
Python实现双向链表基本操作
2022/05/25 Python
win7配置本地ftp服务器的图文教程
2022/08/05 Servers
Win11 Beta 22621.601 和 22622.601今日发布 KB5017384修复内容汇总
2022/09/23 数码科技