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客户端脚本的设计和应用
Aug 21 Javascript
javascript 写类方式之九
Jul 05 Javascript
IE8 chrome中table隔行换色解决办法
Jul 09 Javascript
js仿百度有啊通栏展示效果实现代码
May 28 Javascript
JavaScript中各种引用类型的常用操作方法小结
May 05 Javascript
JavaScript的字符串方法汇总
Jul 31 Javascript
Bootstrap面板使用方法
Jan 16 Javascript
jQuery读取XML文件的方法示例
Feb 03 Javascript
详解Node.js串行化流程控制
May 04 Javascript
vue-router+vuex addRoutes实现路由动态加载及菜单动态加载
Sep 28 Javascript
浅谈vue项目如何打包扔向服务器
May 08 Javascript
vue 插件的方法代码详解
Jun 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实现文本数据导入SQL SERVER
2015/05/17 PHP
PHP判断一个变量是否为整数、正整数的方法示例
2019/09/11 PHP
文字幻灯片
2006/06/26 Javascript
DOM Scripting中的图片切换[兼容Firefox]
2010/06/12 Javascript
用最通俗易懂的代码帮助新手理解javascript闭包 推荐
2012/03/01 Javascript
javascript中setTimeout和setInterval的unref()和ref()用法示例
2014/11/26 Javascript
javascript常用代码段搜集
2014/12/04 Javascript
js获取当前日期前七天的方法
2015/02/28 Javascript
实例详解jQuery Mockjax 插件模拟 Ajax 请求
2016/01/12 Javascript
jquery form表单获取内容以及绑定数据
2016/02/24 Javascript
javascript拖拽应用实例
2016/03/25 Javascript
阿里云ecs服务器中安装部署node.js的步骤
2016/10/08 Javascript
jquery版轮播图效果和extend扩展
2017/07/18 jQuery
老生常谈js数据类型
2017/08/03 Javascript
详解基于vue-cli优化的webpack配置
2017/11/06 Javascript
jQuery创建及操作xml格式数据示例
2018/05/26 jQuery
vue项目打包后打开页面空白解决办法
2018/06/29 Javascript
在Python中调用ggplot的三种方法
2015/04/08 Python
qpython3 读取安卓lastpass Cookies
2016/06/19 Python
python实现指定字符串补全空格、前面填充0的方法
2018/11/16 Python
Python爬虫文件下载图文教程
2018/12/23 Python
keras 两种训练模型方式详解fit和fit_generator(节省内存)
2020/07/03 Python
Django与AJAX实现网页动态数据显示的示例代码
2021/02/24 Python
几款主流好用的富文本编辑器(所见即所得常用编辑器)介绍
2021/03/17 Javascript
HTML5 File接口在web页面上使用文件下载
2017/02/27 HTML / CSS
ASOS比利时:英国线上零售商及自有品牌
2018/07/29 全球购物
英国最大的在线照明商店:Litecraft
2020/08/31 全球购物
热能动力工程毕业生自荐信
2013/11/07 职场文书
毕业生的求职信范文分享
2013/12/04 职场文书
应用英语专业自荐信
2014/01/26 职场文书
《沙漠中的绿洲》教学反思
2014/04/24 职场文书
地球一小时活动总结
2015/02/27 职场文书
2015年大学班长个人工作总结
2015/04/24 职场文书
高中数学教学反思范文
2016/02/18 职场文书
浅谈Python数学建模之线性规划
2021/06/23 Python
介绍一下28个JS常用数组方法
2022/05/06 Javascript