详解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 相关文章推荐
JScript中使用ADODB.Stream判断文件编码的代码
Jun 09 Javascript
一个简单的JS鼠标悬停特效具体方法
Jun 17 Javascript
jQuery链使用指南
Jan 20 Javascript
AngularJS控制器之间的通信方式详解
Nov 03 Javascript
微信小程序商城项目之淘宝分类入口(2)
Apr 17 Javascript
React Native验证码倒计时工具类分享
Oct 24 Javascript
json前后端数据交互相关代码
Sep 19 Javascript
Node.js 进程平滑离场剖析小结
Jan 24 Javascript
一些手写JavaScript常用的函数汇总
Apr 16 Javascript
webpack5 联邦模块介绍详解
Jul 08 Javascript
如何在 Vue 中使用 JSX
Feb 14 Vue.js
前端监听websocket消息并实时弹出(实例代码)
Nov 27 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 地址栏信息的获取代码
2009/01/07 PHP
php学习之 数组声明
2011/06/09 PHP
PHP下 Mongodb 连接远程数据库的实例代码
2017/08/30 PHP
详解no input file specified 三种解决方法
2019/11/29 PHP
php设计模式之备忘模式分析【星际争霸游戏案例】
2020/03/24 PHP
javascipt基础内容--需要注意的细节
2013/04/10 Javascript
解析瀑布流布局:JS+绝对定位的实现
2013/05/08 Javascript
使用javascript控制cookie显示和隐藏背景图
2014/02/12 Javascript
Js表格万条数据瞬间加载实现代码
2014/02/20 Javascript
简单选项卡 js和jquery制作方法分享
2014/02/26 Javascript
排序算法的javascript实现与讲解(99js手记)
2014/09/28 Javascript
简介JavaScript中的italics()方法的使用
2015/06/08 Javascript
基于jquery实现左右按钮点击的图片切换效果
2021/01/27 Javascript
Vue.js 父子组件通讯开发实例
2016/09/06 Javascript
JavaScript实现使用Canvas绘制图形的基本教程
2016/10/27 Javascript
JS无缝滚动效果实现方法分析
2016/12/21 Javascript
JS库之Waypoints的用法详解
2017/09/13 Javascript
vue iview实现动态路由和权限验证功能
2018/04/17 Javascript
vue+webpack实现异步加载三种用法示例详解
2018/04/24 Javascript
15分钟深入了解JS继承分类、原理与用法
2019/01/19 Javascript
使vue实现jQuery调用的两种方法
2019/05/12 jQuery
使用vuex较为优雅的实现一个购物车功能的示例代码
2019/12/09 Javascript
webpack.DefinePlugin与cross-env区别详解
2020/02/23 Javascript
零基础写python爬虫之抓取百度贴吧代码分享
2014/11/06 Python
解决.ui文件生成的.py文件运行不出现界面的方法
2019/06/19 Python
Puppeteer使用示例详解
2019/06/20 Python
python多进程下实现日志记录按时间分割
2019/07/22 Python
C#如何判断当前用户是否输入某个域
2015/12/07 面试题
怎样客观的做好自我评价
2013/12/28 职场文书
学术会议主持词
2014/03/17 职场文书
初中生期末评语大全
2014/04/24 职场文书
还款承诺书范文
2014/05/20 职场文书
2014年项目经理工作总结
2014/11/24 职场文书
幼儿园大班教育随笔
2015/08/14 职场文书
导游词之茶卡盐湖
2019/11/26 职场文书
redis击穿 雪崩 穿透超详细解决方案梳理
2022/03/17 Redis