Vue 父子组件数据传递的四种方式( inheritAttrs + $attrs + $listeners)


Posted in Javascript onMay 04, 2018

当我们在书写 vue 组件的时候,也许可能会用到数据传递;将父组件的数据传递给子组件,有时候也需要通过子组件去事件去触发父组件的事件;

每当我们遇到这样的需求的时候,我们总是会想到有三种解决办法:

通过 props 的方式向子组件传递(父子组件)

vuex 进行状态管理(父子组件和非父子组件) vuex

非父子组件的通信传递 Vue Event Bus ,使用Vue的实例,实现事件的监听和发布,实现组件之间的传递。

后来再逛社区的时候我又发现了还有第四种传递方式, inheritAttrs + $attrs + $listeners

附上原文链接Vue2.4版本中新添加的 attrs 以及 listeners 属性使用 和 Vue.js最佳实践(五招让你成为Vue.js大师)

基本是大部分的公司或者项目都是用前面两种,我司也不例外;好像曾经在官方文档看到过, vuex 适合用在大型的项目中。第三种方式我曾在我的毕设中用到过,其他地方我好像目前是没有看到,当时只有一个功能需要在兄弟组件之间传递数据,用 vuex 的话,大材小用,另外还需要时间成本。所以我选择了 Vue Event Bus ;最后一种方式的话,我目前还没有看到过在项目的应用。但是我个人觉得既然有这个 api 那肯定是有他存在的道理。不然它存在还有何意义的??如果有需求我个人觉得可以尝试用一用;拥抱变化,拥抱机会

工作之后发现,碰到 bug 有时候常规的方式,并不一定是最好的。跳出常规思维,跳出常规方式去解决问题,可能会更加好。常规方法能够解决问题但是未免有些臃肿。在实践的采坑中体会更有意思

inheritAttrs + $attrs + $listeners

inheritAttrs :默认是 true

我的解释就是:没有被子组件继承的父组件属性,不会当做特性展示在子组件根元素上面。说起来,听起来好像有些拗口,看截图看代码你就明白了

inheritAttrs :false

Vue 父子组件数据传递的四种方式( inheritAttrs + $attrs + $listeners)
Vue 父子组件数据传递的四种方式( inheritAttrs + $attrs + $listeners)

inheritAttrs :false

Vue 父子组件数据传递的四种方式( inheritAttrs + $attrs + $listeners)
Vue 父子组件数据传递的四种方式( inheritAttrs + $attrs + $listeners)

c='ture1.png'>

官方解释:默认情况下父作用域的不被认作 props 的特性绑定 ( attribute bindings ) 将会“回退”且作为普通的 HTML 特性应用在子组件的根元素上。当撰写包裹一个目标元素或另一个组件的组件时,这可能不会总是符合预期行为。通过设置 inheritAttrsfalse ,这些默认行为将会被去掉。而通过 (同样是 2.4 新增的) 实例属性 $attrs 可以让这些特性生效,且可以通过 v-bind 显性的绑定到非根元素上。

$attrs

我的解释就是:存放没有被子组件继承的的数据对象;看看图

Vue 父子组件数据传递的四种方式( inheritAttrs + $attrs + $listeners)

官方文档解释:包含了父作用域中不作为 prop 被识别 (且获取) 的特性绑定 (class 和 style 除外)。当一个组件没有声明任何 prop 时,这里会包含所有父作用域的绑定 (class 和 style 除外),并且可以通过 v-bind="$attrs" 传入内部组件——在创建高级别的组件时非常有用。

$listeners

我的理解就是:子组件可以触发父组件的事件(不需要用什么那些麻烦的vuex或者一个空的 Vue 实例作为事件总线,或者又是什么 vm.$on )

Vue 父子组件数据传递的四种方式( inheritAttrs + $attrs + $listeners)

官方文档解释:包含了父作用域中的 (不含 .native 修饰器的) v-on 事件监听器。它可以通过 v-on="$listeners" 传入内部组件——在创建更高层次的组件时非常有用。

总结

以上所述是小编给大家介绍的Vue 父子组件数据传递的四种方式( inheritAttrs + $attrs + $listeners),希望对大家有所帮助,如果大家有任何疑问请给我留言,小编会及时回复大家的。在此也非常感谢大家对三水点靠木网站的支持!

Javascript 相关文章推荐
use jscript with List Proxy Server Information
Jun 11 Javascript
基于JQuery的浮动DIV显示提示信息并自动隐藏
Feb 11 Javascript
百度移动版的url编码解码示例
Apr 29 Javascript
JS、CSS以及img对DOMContentLoaded事件的影响
Aug 12 Javascript
Javascript中实现trim()函数的两种方法
Feb 04 Javascript
javascript实现行拖动的方法
May 27 Javascript
vue调用高德地图实例代码
Apr 28 Javascript
JavaScript利用fetch实现异步请求的方法实例
Jul 26 Javascript
Vue项目使用CDN优化首屏加载问题
Apr 01 Javascript
Vue render渲染时间戳转时间,时间转时间戳及渲染进度条效果
Jul 27 Javascript
使用iView Upload 组件实现手动上传图片的示例代码
Oct 01 Javascript
详解element-ui中form验证杂记
Mar 04 Javascript
JS模拟实现哈希表及应用详解
May 04 #Javascript
vue地区选择组件教程详解
May 04 #Javascript
Vue 按键修饰符处理事件的方法
May 04 #Javascript
vue mint-ui tabbar变组件使用
May 04 #Javascript
Vue结合Video.js播放m3u8视频流的方法示例
May 04 #Javascript
原生javascript AJAX 三级联动的实现代码
May 04 #Javascript
Vue在页面右上角实现可悬浮/隐藏的系统菜单
May 04 #Javascript
You might like
先进的自动咖啡技术,真的可以取代咖啡师吗?
2021/03/06 冲泡冲煮
php_screw安装使用教程(另一个PHP代码加密实现)
2014/05/29 PHP
[原创]php正则删除img标签的方法示例
2017/05/27 PHP
document.designMode的功能与使用方法介绍
2007/11/22 Javascript
一个用javascript写的select支持上下键、首字母筛选以及回车取值的功能
2009/09/09 Javascript
json格式化/压缩工具 Chrome插件扩展版
2010/05/25 Javascript
Pro JavaScript Techniques学习笔记
2010/12/28 Javascript
jQuery写的日历(包括日历的样式及功能)
2013/04/23 Javascript
js获得当前时区夏令时发生和终止的时间代码
2014/02/23 Javascript
javascript使用正则表达式实现去掉空格之后的字符
2015/02/15 Javascript
基于jquery实现鼠标左右拖动滑块滑动附源码下载
2015/12/23 Javascript
js控制一个按钮是否可点击(可使用)disabled的实例
2017/02/14 Javascript
JS实现图片放大缩小的方法
2017/02/15 Javascript
javascript过滤数组重复元素的实现方法
2017/05/03 Javascript
AngularJs ng-change事件/指令的用法小结
2017/11/01 Javascript
vue2.0项目实现路由跳转的方法详解
2018/06/21 Javascript
微信小程序防止多次点击跳转(函数节流)
2019/09/19 Javascript
vue使用nprogress加载路由进度条的方法
2020/06/04 Javascript
基于javascript处理nginx请求过程详解
2020/07/07 Javascript
JS将指定的某个字符全部转换为其他字符实例代码
2020/10/13 Javascript
[28:05]完美世界DOTA2联赛循环赛Inki vs DeMonsTer 第一场 10月30日
2020/10/31 DOTA
使用Python开发windows GUI程序入门实例
2014/10/23 Python
Python中工作日类库Busines Holiday的介绍与使用
2017/07/06 Python
Python随机生成均匀分布在三角形内或者任意多边形内的点
2017/12/14 Python
python+matplotlib演示电偶极子实例代码
2018/01/12 Python
使用 Python 实现文件递归遍历的三种方式
2018/07/18 Python
Python基于class()实现面向对象原理详解
2020/03/26 Python
Python多线程实现支付模拟请求过程解析
2020/04/21 Python
CSS3教程:边框属性border的极致应用
2009/04/02 HTML / CSS
css3实现一款模仿iphone样式的注册表单
2013/03/20 HTML / CSS
美国手机支架公司:PopSockets
2019/11/27 全球购物
学校组织向国旗敬礼活动方案(中小学适用)
2014/09/27 职场文书
党员教师四风问题整改措施思想汇报
2014/10/08 职场文书
售房协议书范本2014
2014/10/23 职场文书
幼师必备:幼儿园期末教师评语50条
2019/11/01 职场文书
Python中json.load()和json.loads()有哪些区别
2021/06/07 Python