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 Date对象使用总结
May 14 Javascript
JQuery扩展插件Validate 5添加自定义验证方法
Sep 05 Javascript
js+html5实现canvas绘制圆形图案的方法
Jun 05 Javascript
fastclick插件导致日期(input[type=&quot;date&quot;])控件无法被触发该如何解决
Nov 09 Javascript
基于Jquery插件实现跨域异步上传文件功能
Apr 26 Javascript
超实用的JavaScript代码段 附使用方法
May 22 Javascript
js图片放大镜实例讲解(必看篇)
Jul 17 Javascript
JSON创建键值对(key是中文或者数字)方式详解
Aug 24 Javascript
javascript 面向对象实战思想分享
Sep 07 Javascript
分分钟学会vue中vuex的应用(入门教程)
Sep 14 Javascript
微信小程序实现鼠标拖动效果示例
Dec 01 Javascript
Vue-CLI 项目在pycharm中配置方法
Aug 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
浅析php变量修饰符static的使用
2013/06/28 PHP
ThinkPHP的截取字符串函数无法显示省略号的解决方法
2014/06/25 PHP
Zend Framework框架教程之Zend_Db_Table_Rowset用法实例分析
2016/03/21 PHP
PHP生成腾讯云COS接口需要的请求签名
2018/05/20 PHP
javascript网页关键字高亮代码
2008/07/30 Javascript
DOM 基本方法
2009/07/18 Javascript
JavaScript中__proto__与prototype的关系深入理解
2012/12/04 Javascript
jQuery实现随意改变div任意属性的名称和值(部分原生js实现)
2013/05/28 Javascript
JS Loading功能的简单实现
2013/11/29 Javascript
js控制iframe的高度/宽度让其自适应内容
2014/04/09 Javascript
微信小程序 欢迎页面的制作(源码下载)
2017/01/09 Javascript
jQuery插件HighCharts实现的2D回归直线散点效果示例【附demo源码下载】
2017/03/09 Javascript
ES6/JavaScript使用技巧分享
2017/12/14 Javascript
解决vue跨域axios异步通信问题
2019/04/17 Javascript
jQuery中DOM操作原则实例分析
2019/08/01 jQuery
Node.js系列之安装配置与基本使用(1)
2019/08/30 Javascript
JS面向对象编程实现的拖拽功能案例详解
2020/03/03 Javascript
Vue脚手架编写试卷页面功能
2020/03/17 Javascript
快速解决element的autofocus失效问题
2020/09/08 Javascript
如何将Node.js中的回调转换为Promise
2020/11/10 Javascript
keep-alive保持组件状态的方法
2020/12/02 Javascript
django模型中的字段和model名显示为中文小技巧分享
2014/11/18 Python
Python脚本实现集群检测和管理功能
2015/03/06 Python
Python unittest 简单实现参数化的方法
2018/11/30 Python
使用python进行拆分大文件的方法
2018/12/10 Python
详解Django admin高级用法
2019/11/06 Python
Python中包的用法及安装
2020/02/11 Python
各大浏览器 CSS3 和 HTML5 兼容速查表 图文
2010/04/01 HTML / CSS
美国正宗奢华复古手袋、珠宝及配饰网站:What Goes Around Comes Around
2018/07/21 全球购物
世界经理人咨询有限公司面试
2014/09/23 面试题
通信工程毕业生求职信
2013/11/16 职场文书
2014单位领导班子四风对照检查材料思想汇报
2014/09/25 职场文书
学校党委干部个人对照检查材料思想汇报
2014/10/09 职场文书
逃出克隆岛观后感
2015/06/09 职场文书
运动员加油词
2015/07/18 职场文书
导游词之重庆渣滓洞
2020/01/08 职场文书