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 相关文章推荐
div移动 输入框不能输入的问题
Nov 19 Javascript
利用jQuery的$.event.fix函数统一浏览器event事件处理
Dec 21 Javascript
jQuery UI 应用不同Theme的办法
Sep 12 Javascript
网页整体变灰白色(兼容各浏览器)实例
Apr 21 Javascript
javascript实现鼠标点击页面 移动DIV
Dec 02 Javascript
JS实现的四级密码强度检测功能示例
May 11 Javascript
使用JavaScript实现alert的实例代码
Jul 06 Javascript
JavaScript 用fetch 实现异步下载文件功能
Jul 21 Javascript
详解小程序循环require之坑
Mar 08 Javascript
vue项目初始化到登录login页面的示例
Oct 31 Javascript
JS实现滑动导航效果
Jan 14 Javascript
全网小程序接口请求封装实例代码
Nov 06 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上传、管理照片示例
2006/10/09 PHP
利用PHP如何实现Socket服务器
2015/09/23 PHP
Django中的cookie与session操作实例代码
2017/08/17 PHP
Thinkphp5.0框架使用模型Model的获取器、修改器、软删除数据操作示例
2019/10/11 PHP
php7 参数、整形及字符串处理机制修改实例分析
2020/05/25 PHP
JQuery实现倒计时按钮具体方法
2013/11/14 Javascript
js数组转json并在后台对其解析具体实现
2013/11/20 Javascript
页面加载完成后再执行JS的jquery写法以及区别说明
2014/02/22 Javascript
JavaScript中匿名、命名函数的性能测试
2014/09/04 Javascript
使用jQuery的easydrag插件实现可拖动的DIV弹出框
2016/02/19 Javascript
javaScript语法总结
2016/11/25 Javascript
JQuery.validationEngine表单验证插件(推荐)
2016/12/10 Javascript
AngularJs中 ng-repeat指令中实现含有自定义指令的动态html的方法
2017/01/19 Javascript
微信小程序实现文字跑马灯效果
2020/05/26 Javascript
vue-cli 3.x 配置Axios(proxyTable)跨域代理方法
2018/09/19 Javascript
mpvue+vant app搭建微信小程序的方法步骤
2019/02/11 Javascript
js事件触发操作实例分析
2019/06/21 Javascript
vue-router 中 meta的用法详解
2019/11/01 Javascript
Win7上搭建Cocos2d-x 3.1.1开发环境
2014/07/03 Python
Python的面向对象思想分析
2015/01/14 Python
Python时间的精准正则匹配方法分析
2017/08/17 Python
python使用openpyxl库修改excel表格数据方法
2018/05/03 Python
Python使用Dijkstra算法实现求解图中最短路径距离问题详解
2018/05/16 Python
Python爬虫爬取新浪微博内容示例【基于代理IP】
2018/08/03 Python
python PrettyTable模块的安装与简单应用
2019/01/11 Python
python对常见数据类型的遍历解析
2019/08/27 Python
python随机模块random使用方法详解
2020/02/14 Python
H&M旗下高端女装品牌:& Other Stories
2018/05/07 全球购物
Simons官方网站:加拿大时尚零售商
2020/02/20 全球购物
大学生毕业的自我评价分享
2014/01/02 职场文书
新学期开学演讲稿
2014/05/24 职场文书
四风问题对照检查材料整改措施
2014/09/27 职场文书
英语复习计划
2015/01/19 职场文书
总经理助理岗位职责范本
2015/03/31 职场文书
七年级作文之英语老师
2019/10/28 职场文书
Android RecyclerView实现九宫格效果
2022/06/28 Java/Android