关于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 相关文章推荐
Ctrl+Enter提交内容信息
Jun 26 Javascript
javascript在myeclipse中报错的解决方法
Oct 29 Javascript
jQuery函数map()和each()介绍及异同点分析
Nov 08 Javascript
jQuery简单实现QQ空间点赞已经取消点赞
Apr 02 Javascript
基于jQuery Tipso插件实现消息提示框特效
Mar 16 Javascript
基于BootStrap Metronic开发框架经验小结【七】数据的导入、导出及附件的查看处理
May 12 Javascript
详解JavaScript对象的深浅复制
Mar 30 Javascript
使用jQuery卸载全部事件的思路详解
Apr 03 jQuery
原生JS实现ajax与ajax的跨域请求实例
Dec 01 Javascript
JS/HTML5游戏常用算法之路径搜索算法 A*寻路算法完整实例
Dec 14 Javascript
微信小程序保存图片到相册权限设置
Apr 09 Javascript
vue mvvm数据响应实现
Nov 11 Javascript
对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下图片文字混合水印与缩略图实现代码
2009/12/11 PHP
php采用ajax数据提交post与post常见方法总结
2014/11/10 PHP
详解PHP实现异步调用的4种方法
2016/03/14 PHP
PHP实现广度优先搜索算法(BFS,Broad First Search)详解
2017/09/16 PHP
PHP+redis实现的限制抢购防止商品超发功能详解
2019/09/19 PHP
Laravel 类和接口注入相关的代码
2019/10/15 PHP
Laravel 5+ .env环境配置文件详解
2020/04/06 PHP
jQuery html() in Firefox (uses .innerHTML) ignores DOM changes
2010/03/05 Javascript
JQuery表格内容过滤的实现方法
2013/07/05 Javascript
输入框过滤非数字的js代码
2014/09/18 Javascript
浏览器缩放检测的js代码
2014/09/28 Javascript
JavaScript实现下拉列表框数据增加、删除、上下排序的方法
2015/08/11 Javascript
浅析JavaScript动画模拟拖拽原理
2016/12/09 Javascript
详解为Angular.js内置$http服务添加拦截器的方法
2016/12/20 Javascript
Javascript 制作图形验证码实例详解
2016/12/22 Javascript
BootStrap表单验证实例代码
2017/01/13 Javascript
js获取当前页的URL与window.location.href简单方法
2017/02/13 Javascript
Node在Controller层进行数据校验的过程详解
2020/08/28 Javascript
[01:43]倾听DOTA2英雄之声 魅惑魔女国服配音鉴赏
2013/06/06 DOTA
[01:53]3.19 DOTA2发布会 现场精彩Coser表演
2014/03/25 DOTA
使用python 和 lint 删除项目无用资源的方法
2017/12/20 Python
python跳出双层for循环的解决方法
2019/06/24 Python
Django继承自带user表并重写的例子
2019/11/18 Python
Python3 使用map()批量的转换数据类型,如str转float的实现
2019/11/29 Python
python 字典套字典或列表的示例
2019/12/16 Python
Python图像处理库PIL的ImageFont模块使用介绍
2020/02/26 Python
Python解释器及PyCharm工具安装过程
2020/02/26 Python
浅析Python __name__ 是什么
2020/07/07 Python
北京RT科技有限公司.net工程师面试题
2013/02/15 面试题
四川成都导游欢迎词
2014/01/18 职场文书
品质主管岗位职责
2014/03/16 职场文书
中华在我心中演讲稿
2014/09/13 职场文书
个人贷款收入证明
2014/10/26 职场文书
2015年推普周活动方案
2015/05/06 职场文书
辅导员学期工作总结
2015/08/14 职场文书
详解PHP用mb_string处理windows中文字符
2021/05/26 PHP