关于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 相关文章推荐
JavaScript 设计模式 富有表现力的Javascript(一)
May 26 Javascript
修改js Calendar日历控件 兼容IE9/谷歌/火狐
Jan 04 Javascript
深入理解Javascript作用域与变量提升
Dec 09 Javascript
元素未显示设置width/height时IE中使用currentStyle获取为auto
May 04 Javascript
js获取当前页面的url网址信息
Jun 12 Javascript
vue单页缓存方案分析及实现
Sep 25 Javascript
使用异步controller与jQuery实现卷帘式分页
Jun 18 jQuery
weui上传多图片,压缩,base64编码的示例代码
Jun 22 Javascript
PHP读取远程txt文档到数组并实现遍历
Aug 25 Javascript
vue实现购物车的小练习
Dec 21 Vue.js
js 执行上下文和作用域的相关总结
Feb 08 Javascript
使用JS前端技术实现静态图片局部流动效果
Aug 05 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中取得URL的根域名的代码
2011/03/23 PHP
Yii框架中使用PHPExcel的方法分析
2019/07/25 PHP
Javascript优化技巧(文件瘦身篇)
2008/01/28 Javascript
jquery如何获取复选框的值
2013/12/12 Javascript
jQuery中append()方法用法实例
2014/12/25 Javascript
JS实现网页Div层Clone拖拽效果
2015/09/26 Javascript
原生和jQuery的ajax用法详解
2017/01/23 Javascript
深入理解react-router@4.0 使用和源码解析
2017/05/23 Javascript
微信小程序之滚动视图容器的实现方法
2017/09/26 Javascript
AngularJS监听ng-repeat渲染完成的方法
2018/03/20 Javascript
Vue实现美团app的影院推荐选座功能【推荐】
2018/08/29 Javascript
js jquery 获取某一元素到浏览器顶端的距离实现方法
2018/09/05 jQuery
彻底弄懂 JavaScript 执行机制
2018/10/23 Javascript
Vue如何提升首屏加载速度实例解析
2020/06/25 Javascript
Vue+penlayers实现多边形绘制及展示
2020/12/24 Vue.js
[04:50]DOTA2亚洲邀请赛小组赛第四日 TOP10精彩集锦
2015/02/02 DOTA
[57:28]2018DOTA2亚洲邀请赛 4.6 淘汰赛 TNC vs Liquid 第一场
2018/04/10 DOTA
Python导出数据到Excel可读取的CSV文件的方法
2015/05/12 Python
机器学习经典算法-logistic回归代码详解
2017/12/22 Python
浅谈keras 模型用于预测时的注意事项
2020/06/27 Python
Python 执行矩阵与线性代数运算
2020/08/01 Python
详解CSS3中强大的filter(滤镜)属性
2017/06/29 HTML / CSS
夏洛特和乔治婴儿和儿童时装精品店:Charlotte and George
2018/06/06 全球购物
欧姆龙医疗保健与医疗产品:Omron Healthcare
2020/02/10 全球购物
戴森香港官方网站:Dyson香港
2021/02/11 全球购物
公务员年总结的自我评价
2013/10/25 职场文书
兼职业务员岗位职责
2014/01/01 职场文书
国贸专业的职业规划范文
2014/01/23 职场文书
水利学院求职自荐书
2014/02/01 职场文书
会计员岗位职责
2014/03/15 职场文书
幼儿园六一儿童节文艺汇演主持词
2014/03/21 职场文书
门店业绩提升方案
2014/06/08 职场文书
家长会欢迎标语
2014/06/24 职场文书
自愿离婚协议书2015
2015/01/26 职场文书
详解MySQL事务的隔离级别与MVCC
2021/04/22 MySQL
海贼王十大逆天果实 魂魂果实上榜,岩浆果实攻击力最强
2022/03/18 日漫