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 相关文章推荐
js自执行函数的几种不同写法的比较
Aug 16 Javascript
jQuery获取和设置表单元素的方法
Feb 14 Javascript
jQuery中innerWidth()方法用法实例
Jan 19 Javascript
jquery制作多功能轮播图插件
Apr 02 Javascript
跨域请求两种方法 jsonp和cors的实现
Nov 11 Javascript
利用Vconsole和Fillder进行移动端抓包调试方法
Mar 05 Javascript
理理Vue细节(推荐)
Apr 16 Javascript
vue项目中使用eslint+prettier规范与检查代码的方法
Jan 16 Javascript
Vue自定义组件的四种方式示例详解
Feb 28 Javascript
Vue.js获取手机系统型号、版本、浏览器类型的示例代码
May 10 Javascript
keep-Alive搭配vue-router实现缓存页面效果的示例代码
Jun 24 Javascript
el-table-column 内容不自动换行的解决方法
Aug 14 Vue.js
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(三)
2012/03/22 PHP
深入PHP nl2br()格式化输出的详解
2013/06/05 PHP
PHP的变量类型和作用域详解
2014/03/12 PHP
php把数组值转换成键的方法
2015/07/13 PHP
php封装的连接Mysql类及用法分析
2015/12/10 PHP
PHP内置函数生成随机数实例
2019/01/18 PHP
Lazy Load 延迟加载图片的 jQuery 插件
2010/02/06 Javascript
Webkit的跨域安全问题说明
2011/09/13 Javascript
利用ajaxfileupload插件实现文件上传无刷新的具体方法
2013/06/08 Javascript
如何使用Javascript获取距今n天前的日期
2013/07/08 Javascript
JS实现图片放大镜效果的方法
2015/02/27 Javascript
AngularJS基础知识笔记之过滤器
2015/05/10 Javascript
微信小程序 绘图之饼图实现
2016/10/24 Javascript
javascript实现table单元格点击展开隐藏效果(实例代码)
2017/04/10 Javascript
浅谈高大上的微信小程序中渲染html内容—技术分享
2018/10/25 Javascript
vue中组件的3种使用方式详解
2019/03/23 Javascript
javascript判断一个变量是数组还是对象
2019/04/10 Javascript
JS解惑之Object中的key是有序的么
2019/05/06 Javascript
vue项目中定义全局变量、函数的几种方法
2019/11/08 Javascript
Python实现读写sqlite3数据库并将统计数据写入Excel的方法示例
2017/08/07 Python
Python简单生成随机数的方法示例
2018/03/31 Python
Python实现使用卷积提取图片轮廓功能示例
2018/05/12 Python
Django框架会话技术实例分析【Cookie与Session】
2019/05/24 Python
使用python+poco+夜神模拟器进行自动化测试实例
2020/04/23 Python
科颜氏美国官网:Kiehl’s美国
2017/01/31 全球购物
英国时尚服饰电商:Boohoo
2017/10/12 全球购物
毕业生机械建模求职信
2013/10/14 职场文书
工艺员岗位职责
2014/02/11 职场文书
小学生学雷锋演讲稿
2014/04/25 职场文书
绿色家庭事迹材料
2014/05/01 职场文书
保护环境倡议书300字
2014/05/19 职场文书
主要负责人任命书
2014/06/06 职场文书
2014教师研修学习体会
2014/07/08 职场文书
在职证明书范本(2014新版)
2014/09/25 职场文书
2015大学生实训报告
2014/11/05 职场文书
2014年社区宣传工作总结
2014/12/02 职场文书