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 相关文章推荐
jqeury eval将字符串转换json的方法
Jan 20 Javascript
Javascript浅谈之this
Dec 17 Javascript
AngularJS 中的事件详解
Jul 28 Javascript
利用jquery正则表达式在页面验证url网址输入是否正确
Apr 04 jQuery
自定义事件解决重复请求BUG的问题
Jul 11 Javascript
js实现数组内数据的上移和下移的实例
Nov 14 Javascript
基于casperjs和resemble.js实现一个像素对比服务详解
Jan 10 Javascript
angular实现页面打印局部功能的思考与方法
Apr 13 Javascript
vue打包之后生成一个配置文件修改接口的方法
Dec 09 Javascript
微信小程序中使用echarts的实现方法
Apr 24 Javascript
electron-vue利用webpack打包实现多页面的入口文件问题
May 12 Javascript
在vue中配置不同的代理同时访问不同的后台操作
Sep 11 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
域名查询代码公布
2006/10/09 PHP
php扩展ZF――Validate扩展
2008/01/10 PHP
有关JSON以及JSON在PHP中的应用
2010/04/09 PHP
探讨fckeditor在Php中的配置详解
2013/06/08 PHP
PHP中常用的转义函数
2014/02/28 PHP
PHP使用trim函数去除字符串左右空格及特殊字符实例
2016/01/07 PHP
ThinkPHP连接Oracle数据库
2016/04/22 PHP
ThinkPHP框架获取最后一次执行SQL语句及变量调试简单操作示例
2018/06/13 PHP
详解php协程知识点
2018/09/21 PHP
PHP call_user_func和call_user_func_array函数的简单理解与应用分析
2019/11/25 PHP
让您的菜单不离网站
2006/10/03 Javascript
用正则表达式 动态创建/增加css style script 兼容IE firefox
2009/03/10 Javascript
js 获取中文拼音,Select自动匹配字母获取值的代码
2009/09/23 Javascript
学习ExtJS form布局
2009/10/08 Javascript
让IE6支持min-width和max-width的方法
2010/06/25 Javascript
基于jquery的获取浏览器窗口大小的代码
2011/03/28 Javascript
jquery实现右键菜单插件
2015/03/29 Javascript
Jquery 效果使用详解
2015/11/23 Javascript
Ext JS框架中日期函数的用法及日期选择控件的实现
2016/05/21 Javascript
angular.js分页代码的实例
2016/07/27 Javascript
BootStrap框架个人总结(bootstrap框架、导航条、下拉菜单、轮播广告carousel、栅格系统布局、标签页tabs、模态框、菜单定位)
2016/12/01 Javascript
nodejs中使用HTTP分块响应和定时器示例代码
2017/03/19 NodeJs
JavaScript实现单击网页任意位置打开新窗口与关闭窗口的方法
2017/09/21 Javascript
vue 使用element-ui中的Notification自定义按钮并实现关闭功能及如何处理多个通知
2019/08/17 Javascript
javascript json对象小技巧之键名作为变量用法分析
2019/11/11 Javascript
JavaScript使用prototype属性实现继承操作示例
2020/05/22 Javascript
python 二分查找和快速排序实例详解
2017/10/13 Python
解决python爬虫中有中文的url问题
2018/05/11 Python
django框架自定义用户表操作示例
2018/08/07 Python
Python3 串口接收与发送16进制数据包的实例
2019/06/12 Python
pyqt5 实现在别的窗口弹出进度条
2019/06/18 Python
python可视化篇之流式数据监控的实现
2019/08/07 Python
使用Python制作一盏 3D 花灯喜迎元宵佳节
2021/02/26 Python
俄罗斯运动鞋商店:Sneakerhead
2018/05/10 全球购物
夜大自我鉴定
2013/10/31 职场文书
毕业证委托书范文
2014/09/26 职场文书