vue中通过使用$attrs实现组件之间的数据传递功能


Posted in Javascript onSeptember 01, 2019

组件之间传递数据的方式有很多种,之所以有这么多种方式,是为了满足在不同场景不同条件下的使用。

一般有三种方式:

props
vuex
Vue Event Bus

本文介绍的是使用$attrs的方式。

这是$attrs的官网api https://cn.vuejs.org/v2/api/#vm-attrs

这个api是在2.4版本中添加的,那么为什么要添加这个特性呢?
看看官网是怎么解释的

包含了父作用域中不作为 prop 被识别 (且获取) 的特性绑定 ( class  和  style  除外)。

当一个组件没有声明任何 prop 时,这里会包含所有父作用域的绑定 ( class  和  style  除外),

并且可以通过  v-bind="$attrs"  传入内部组件——在创建高级别的组件时非常有用。

第一次看的话真是不容易看懂,这里是既包含用法又隐晦的说明了为什么使用,还是我来解释一下吧。

意思就是: $attrs 可以收集父组件中的所有传过来的属性除了那些在组件中没有通过  props 定义的。

引申说明一下,如果组件的嵌套层级有点深但又不那么深,比如三层。

我们如果使用props的话,最里面的组件想要获取最外层组件的数据,就要通过中间的组件的props来传递,

但是这个props对于中间的这个组件没啥用处,它就是做了一个桥梁而已。我们平时写代码时候其实经常碰到

这种场景,写起来有时候觉得挺烦的。所以就有了这个$attrs来帮助我们,不必在中间组件中写props就可以让

最里面的组件拿到最外面组件传进来的数据。

那么,具体怎么使用呢?

看看下面的代码吧,很简单就懂了

准备三个组件

vue中通过使用$attrs实现组件之间的数据传递功能 

里面的代码如下

//grandfather
<template>
 <div style="background: blue">
  father in grandfather
  <father :father-age="50" :child-time="`${time}`"></father>
 </div>
</template>
<script>
import father from './father'
export default {
 components: {
  father
 },
 data () {
  return {
   time: new Date().getTime()
  }
 }
}
</script>

//father
<template>
 <div style="background: red">
  child in father
  <div>
   <span>father age:</span>{{fatherAge}}
  </div>
  <child v-bind="$attrs"></child>
 </div>
</template>
<script>
import child from './child'
export default {
 components: {
  child
 },
 props: {
  fatherAge: {
   type: Number,
   default: 0
  }
 }
}
</script>

//child<template>
 <div style="background: green">
  <div>child</div>
  <div>time: {{childTime}}</div>
 </div>
</template>
<script>
export default {
 props: {
  childTime: {
   type: String,
   default: ''
  }
 }
}
</script>

需要从爷爷组件直接传给子组件的数据,不要在父组件中的props中声明。

在子组件上通过v-bind的方式就可以把父组件中未声明而子组件需要从爷爷组件中获取的数据传给子组件。

当然,子组件props肯定是要声明的,还是props的用法啦。

总结

以上所述是小编给大家介绍的vue中通过使用$attrs实现组件之间的数据传递功能,希望对大家有所帮助,如果大家有任何疑问欢迎给我留言,小编会及时回复大家的!

Javascript 相关文章推荐
IE JS编程需注意的内存释放问题
Jun 23 Javascript
基于Jquery的表格隔行换色,移动换色,点击换色插件
Dec 22 Javascript
js Dialog 实践分享
Oct 22 Javascript
js身份证判断方法支持15位和18位
Mar 18 Javascript
node.js中的events.emitter.once方法使用说明
Dec 10 Javascript
jQuery中:input选择器用法实例
Jan 03 Javascript
jquery实现经典的淡入淡出选项卡效果代码
Sep 22 Javascript
Vue.js 2.0 和 React、Augular等其他前端框架大比拼
Oct 08 Javascript
浅谈angular2的http请求返回结果的subcribe注意事项
Mar 01 Javascript
Node.js创建Web、TCP服务器
Dec 05 Javascript
详解Vue中使用Echarts的两种方式
Jul 03 Javascript
node上的redis调用优化示例详解
Oct 30 Javascript
Vue使用mixin分发组件的可复用功能
Sep 01 #Javascript
JavaScript页面加载事件实例讲解
Sep 01 #Javascript
Node.js安装详细步骤教程(Windows版)详解
Sep 01 #Javascript
vue组件命名和props命名代码详解
Sep 01 #Javascript
Vue-CLI项目中路由传参的方式详解
Sep 01 #Javascript
vue实现输入框的模糊查询的示例代码(节流函数的应用场景)
Sep 01 #Javascript
vue中的v-if和v-show的区别详解
Sep 01 #Javascript
You might like
星际争霸 Starcraft 发展史
2020/03/14 星际争霸
fckeditor上传文件按日期存放及重命名方法
2015/05/22 PHP
详解YII关联查询
2016/01/10 PHP
PHP控制前台弹出对话框的实现方法
2016/08/21 PHP
php解决约瑟夫环算法实例分析
2019/09/30 PHP
用Javascript 获取页面元素的位置的代码
2009/09/25 Javascript
js实现省市联动效果的简单实例
2014/02/10 Javascript
jquery trigger伪造a标签的click事件取代window.open方法
2014/06/23 Javascript
javascript对中文按照拼音排序代码
2014/08/20 Javascript
BootStrap Progressbar 实现大文件上传的进度条的实例代码
2016/06/27 Javascript
jQuery按需加载轮播图(web前端性能优化)
2017/02/17 Javascript
AngularJS实现页面定时刷新
2017/03/14 Javascript
vue+vuecli+webpack中使用mockjs模拟后端数据的示例
2017/10/24 Javascript
vue 自定义组件 v-model双向绑定、 父子组件同步通信的多种写法
2017/11/27 Javascript
angular实现input输入监听的示例
2018/08/31 Javascript
node.js连接mysql与基本用法示例
2019/01/05 Javascript
解决Vue中的生命周期beforeDestory不触发的问题
2020/07/21 Javascript
Vue看了就会的8个小技巧
2021/01/21 Vue.js
[00:27]DOTA2荣耀之路2:Patience from zhou!
2018/05/24 DOTA
python数据库操作常用功能使用详解(创建表/插入数据/获取数据)
2013/12/06 Python
Python基于机器学习方法实现的电影推荐系统实例详解
2019/06/25 Python
Python使用scrapy爬取阳光热线问政平台过程解析
2019/08/14 Python
django迁移文件migrations的实现
2020/03/31 Python
django模板获取list中指定索引的值方式
2020/05/14 Python
基于OpenCV的路面质量检测的实现
2020/11/04 Python
加拿大国民体育购物网站:National Sports
2018/11/04 全球购物
Perfume’s Club英国官网:购买香水和护肤品
2019/11/02 全球购物
DataReader和DataSet的异同
2014/12/31 面试题
通信工程专业女生个人求职信
2013/09/21 职场文书
端午节粽子促销活动方案
2014/02/02 职场文书
写求职信有什么意义
2014/02/17 职场文书
《大作家的小老师》教学反思
2014/04/16 职场文书
党支部创先争优承诺书
2014/08/30 职场文书
Jsonp劫持学习
2021/04/01 PHP
Go语言基础map用法及示例详解
2021/11/17 Golang
mysql数据库实现设置字段长度
2022/06/10 MySQL