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 面向对象编程 聊聊对象的事
Sep 17 Javascript
jQuery Tools tab使用介绍
Jul 14 Javascript
基于jQuery实现左右div自适应高度完全相同的代码
Aug 09 Javascript
jquery操作select大全
Apr 25 Javascript
js从Cookies里面取值的简单实现
Jun 30 Javascript
javascript实现点击提交按钮后显示loading的方法
Jul 03 Javascript
AngularJS入门教程之AngularJS表达式
Apr 18 Javascript
javascript用正则表达式过滤空格的实现代码
Jun 14 Javascript
BootStrap整体框架之基础布局组件
Dec 15 Javascript
浅谈Vue的加载顺序探讨
Oct 25 Javascript
JS判断用户用的哪个浏览器实例详解
Oct 09 Javascript
基于Vue实现可以拖拽的树形表格实例详解
Oct 18 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限制HTML内容中图片必须是本站的方法
2015/06/16 PHP
PHP使用反射机制实现查找类和方法的所在位置
2016/04/22 PHP
php获取一定范围内取N个不重复的随机数
2016/05/28 PHP
PHP使用ActiveMQ实现消息队列的方法详解
2019/05/31 PHP
js 事件处理函数间的Event物件是否全等
2011/04/08 Javascript
深入理解JavaScript系列(12) 变量对象(Variable Object)
2012/01/16 Javascript
拉动滚动条加载数据的jquery代码
2012/05/03 Javascript
js 实现在离开页面时提醒未保存的信息(减少用户重复操作)
2013/01/16 Javascript
js中opener与parent的区别详细解析
2014/01/14 Javascript
深入理解Javascript中的自执行匿名函数
2016/06/03 Javascript
精彩的Bootstrap案例分享 重点在注释!(选项卡、栅格布局)
2016/07/01 Javascript
jQuery实现动态文字搜索功能
2017/01/05 Javascript
随机生成10个不重复的0-100的数字(实例讲解)
2017/08/16 Javascript
vuex操作state对象的实例代码
2018/04/25 Javascript
webpack实践之DLLPlugin 和 DLLReferencePlugin的使用教程
2019/06/10 Javascript
原生JS无缝滑动轮播图
2019/10/22 Javascript
在服务器端实现无间断部署Python应用的教程
2015/04/16 Python
Python实现的简单hangman游戏实例
2015/06/28 Python
Python的Flask框架标配模板引擎Jinja2的使用教程
2016/07/12 Python
解决Mac下首次安装pycharm无project interpreter的问题
2018/10/29 Python
在windows下使用python进行串口通讯的方法
2019/07/02 Python
Python学习笔记之For循环用法详解
2019/08/14 Python
Python 异常的捕获、异常的传递与主动抛出异常操作示例
2019/09/23 Python
python如何获取apk的packagename和activity
2020/01/10 Python
matplotlib 曲线图 和 折线图 plt.plot()实例
2020/04/17 Python
HTMl5的存储方式sessionStorage和localStorage详解
2014/03/18 HTML / CSS
杠杆的科学教学反思
2014/01/10 职场文书
手机被没收检讨书
2014/02/22 职场文书
结婚保证书范文
2014/04/29 职场文书
2014年度个人总结范文
2015/03/09 职场文书
校车安全管理责任书
2015/05/11 职场文书
2015年信息宣传工作总结
2015/05/26 职场文书
如何用Python搭建gRPC服务
2021/06/30 Python
python ConfigParser库的使用及遇到的坑
2022/02/12 Python
Mysql分库分表之后主键处理的几种方法
2022/02/15 MySQL
再谈python_tkinter弹出对话框创建
2022/03/20 Python