关于vue组件事件属性穿透详解


Posted in Javascript onOctober 28, 2019

组件事件属性穿透

属性

$attrs包含从父组件传过来的属性,但不包含子组件中prop中的属性以及class和style,所以对于那些html元素原生属性,可以不用再子组件中声明,直接从父组件中传进来就好

// 子组件
<template>
 <div>
   <input type="text" name="" id="" v-bind="$attrs" v-on='listeners'/>
 </div>
</template>
 props: {
  test: {
   type: String,
   default: '123456'
  }
 },
 created () {
  console.log(`props:%o`, this.$props) // {test: '测试'}
  console.log('attrs:%o', this.$attrs) // {value: '测试'}
 },

 // 父组件
 <myInput :value="value" :class="class_" :style='style' :test='test' @input1="input"/>
  data () {
  return {
   style: {
    color: 'red'
   },
   value: '测试',
   class_: 'test',
   test: '测试'
  }
 }

注意:

由于在这个组件中input并不是根元素,默认情况下父组件的不被认作 props 的特性绑定将会“回退”且作为普通的 HTML 特性应用在子组件的根元素上,在该例子中根节点div会有value="测试"的属性,所以子组件需要设置 inheritAttrs: false去掉根元素默认行为,这样就可以通过实例属性 $attrs 可以让这些特性生效,且可以通过 v-bind 显性的绑定到非根元素上。

在子组件修改props,却不会修改父组件,这是因为extractPropsFromVNodeData中是通过浅复制将父组件中数据传递给props的。 浅复制意味着在子组件中对对象和数组的props进行修改还是会影响父组件,这就违背了单向数据流的设计。因此需要避免这种情况出现。

事件

$listeners包含了父作用域中的 (不含 .native 修饰器的) v-on 事件监听器。它可以通过 v-on="$listeners" 传入内部组件
 computed: {
  listeners () {
   return {
    ...this.$listeners,
    // 下面写需要从子组件事件传值到从父组件中的
    input: e => {
     this.$emit('input1', e.target.value)
    }
   }
  }
 },

以上这篇关于vue组件事件属性穿透详解就是小编分享给大家的全部内容了,希望能给大家一个参考,也希望大家多多支持三水点靠木。

Javascript 相关文章推荐
灵活应用js调试技巧解决样式问题的步骤分享
Mar 15 Javascript
浏览器页面区域大小的js获取方法
Sep 21 Javascript
JSON格式化输出
Nov 10 Javascript
浅谈Javascript 数组与字典
Jan 29 Javascript
JS中使用apply方法通过不同数量的参数调用函数的方法
May 31 Javascript
利用JS判断字符串是否含有数字与特殊字符的方法小结
Nov 25 Javascript
Vue2.0 组件传值通讯的示例代码
Aug 01 Javascript
微信小程序实现鼠标拖动效果示例
Dec 01 Javascript
js中document.write和document.writeln的区别
Mar 11 Javascript
详解基于vue的服务端渲染框架NUXT
Jun 20 Javascript
详解CommonJS和ES6模块循环加载处理的区别
Dec 26 Javascript
基于vue的video播放器的实现示例
Feb 19 Vue.js
对vue中的事件穿透与禁止穿透实例详解
Oct 28 #Javascript
vue h5移动端禁止缩放代码
Oct 28 #Javascript
在Vue项目中,防止页面被缩放和放大示例
Oct 28 #Javascript
element-ui 本地化使用教程详解
Oct 28 #Javascript
vue 全局环境切换问题
Oct 27 #Javascript
vue 父组件通过v-model接收子组件的值的代码
Oct 27 #Javascript
解决包含在label标签下的checkbox在ie8及以下版本点击事件无效果兼容的问题
Oct 27 #Javascript
You might like
php程序效率优化的一些策略小结
2010/07/17 PHP
PHP Directory 函数的详解
2013/03/07 PHP
php上传文件问题汇总
2015/01/30 PHP
YII2.0之Activeform表单组件用法实例
2016/01/09 PHP
PC端微信扫码支付成功之后自动跳转php版代码
2017/07/07 PHP
如何在PHP中使用数组
2020/06/09 PHP
自动更新作用
2006/10/08 Javascript
基于jquery的高性能td和input切换并可修改内容实现代码
2011/01/09 Javascript
瀑布流布局代码一例
2014/04/11 Javascript
使用JavaScript判断图片是否加载完成的三种实现方式
2014/05/04 Javascript
JS实现光滑展开合拢的菜单效果代码
2015/09/16 Javascript
ES6中Math对象的部分扩展
2017/02/20 Javascript
Vue.Draggable实现拖拽效果
2020/07/29 Javascript
vue路由跳转时判断用户是否登录功能的实现
2017/10/26 Javascript
详解webpack 最简打包结果分析
2019/02/20 Javascript
前端深入理解Typescript泛型概念
2020/03/09 Javascript
基于vue中的scoped坑点解说
2020/09/04 Javascript
《Python之禅》中对于Python编程过程中的一些建议
2015/04/03 Python
Python中的descriptor描述器简明使用指南
2016/06/02 Python
Numpy array数据的增、删、改、查实例
2018/06/04 Python
python实现生成字符串大小写字母和数字的各种组合
2019/01/01 Python
python中报错&quot;json.decoder.JSONDecodeError: Expecting value:&quot;的解决
2019/04/29 Python
Django 实现前端图片压缩功能的方法
2019/08/07 Python
python实现逆滤波与维纳滤波示例
2020/02/26 Python
利用pipenv和pyenv管理多个相互独立的Python虚拟开发环境
2020/11/01 Python
python产生模拟数据faker库的使用详解
2020/11/04 Python
matplotlib 使用 plt.savefig() 输出图片去除旁边的空白区域
2021/01/05 Python
HTML5 Canvas 破碎重组的视频特效的示例代码
2019/09/24 HTML / CSS
YOOX美国官方网站:全球著名的多品牌时尚网络概念店
2016/09/11 全球购物
商得四方公司面试题(gid+)
2014/04/30 面试题
专科毕业生学习生活的自我评价
2013/10/26 职场文书
优秀英语专业毕业生求职信
2013/11/23 职场文书
《梅花魂》教学反思
2014/04/30 职场文书
超市优秀员工事迹材料
2014/05/01 职场文书
学校教学工作总结2015
2015/05/19 职场文书
员工手册董事长致辞
2015/07/29 职场文书