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 相关文章推荐
如何确保JavaScript的执行顺序 之实战篇
Mar 03 Javascript
js通过八个点 拖动改变div大小的实现方法
Mar 05 Javascript
JavaScript三元运算符的多种使用技巧
Apr 16 Javascript
javascript实现table选中的行以指定颜色高亮显示的方法
May 13 Javascript
JavaScript匿名函数之模仿块级作用域
Dec 12 Javascript
使用BootStrap建立响应式网页——通栏轮播图(carousel)
Dec 21 Javascript
jQuery控制元素隐藏和显示
Mar 03 Javascript
vue 2.8.2版本配置刚进入时候的默认页面方法
Sep 21 Javascript
vue element 生成无线级左侧菜单的实现代码
Aug 21 Javascript
微信小程序 数据缓存实现方法详解
Aug 26 Javascript
es6中new.target的作用和使用场景简单示例分析
Mar 14 Javascript
微信小程序 接入腾讯地图的两种写法
Jan 12 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
PHP中常见的密码处理方式和建议总结
2018/10/14 PHP
PHP基于进程控制函数实现多线程
2020/12/09 PHP
js解析json读取List中的实体对象示例
2014/03/11 Javascript
在JavaScript中使用timer示例
2014/05/08 Javascript
jQuery使用addClass()方法给元素添加多个class样式
2015/03/26 Javascript
jquery制作多功能轮播图插件
2015/04/02 Javascript
Easyui和zTree两种方式分别实现树形下拉框
2017/08/04 Javascript
深入理解Vue生命周期、手动挂载及挂载子组件
2017/09/27 Javascript
基于iScroll实现内容滚动效果
2018/03/21 Javascript
基于jQuery实现无缝轮播与左右点击效果
2018/05/13 jQuery
JS实现获取进今年第几天是周几的方法分析
2018/06/27 Javascript
JS实现判断有效的数独算法示例
2019/02/25 Javascript
Vue v-for循环之@click点击事件获取元素示例
2019/11/09 Javascript
JS实现判断移动端PC端功能
2020/02/21 Javascript
js实现选项卡效果
2020/03/07 Javascript
javascript设计模式 ? 职责链模式原理与用法实例分析
2020/04/16 Javascript
区分vue-router的hash和history模式
2020/10/03 Javascript
[15:28]DOTA2 HEROS教学视频教你分分钟做大人-剧毒术士
2014/06/13 DOTA
[51:26]VP vs VG 2018国际邀请赛小组赛BO2 第二场 8.19
2018/08/21 DOTA
pydev使用wxpython找不到路径的解决方法
2013/02/10 Python
Python基于pygame实现图片代替鼠标移动效果
2015/11/11 Python
python+pandas+时间、日期以及时间序列处理方法
2018/07/10 Python
浅析python中的迭代与迭代对象
2018/10/08 Python
python类中super() 的使用解析
2019/12/19 Python
python判断两个序列的成员是否一样的实例代码
2020/03/01 Python
Python爬虫教程知识点总结
2020/10/19 Python
用python写一个带有gui界面的密码生成器
2020/11/06 Python
国际知名设计师时装商店:Coggles
2016/09/05 全球购物
企划经理的岗位职责
2013/11/17 职场文书
给老婆的保证书范文
2014/04/28 职场文书
小学校长竞聘演讲稿
2014/05/16 职场文书
2014年工程部工作总结
2014/11/25 职场文书
捐款感谢信
2015/01/20 职场文书
试用期辞职信范文
2015/03/02 职场文书
校车司机安全责任书
2015/05/11 职场文书
Oracle表空间与权限的深入讲解
2021/11/17 Oracle