关于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 相关文章推荐
JQuery 国际象棋棋盘 实现代码
Jun 26 Javascript
使用jQuery全局事件ajaxStart为特定请求实现提示效果的代码
Dec 30 Javascript
AJAX分页的代码(后台asp.net)
Feb 14 Javascript
左侧是表头的JS表格控件(自写,网上没有的)
Jun 04 Javascript
jquery操作对象数组元素方法详解
Nov 26 Javascript
深入分析js的冒泡事件
Dec 05 Javascript
js 将图片连接转换成base64格式的简单实例
Aug 10 Javascript
Vue.js每天必学之指令系统与自定义指令
Sep 07 Javascript
javascript实现圣旨卷轴展开效果(代码分享)
Mar 23 Javascript
vue 项目 iOS WKWebView 加载
Apr 17 Javascript
微信小程序如何修改本地缓存key中单个数据的详解
Apr 26 Javascript
在微信小程序中使用vant的方法
Jun 07 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连接mssql的一些相关经验及注意事项
2013/02/05 PHP
JavaScript 检测浏览器和操作系统的脚本
2008/12/26 Javascript
ANT 压缩(去掉空格/注释)JS文件可提高js运行速度
2013/04/15 Javascript
关于jQuery新的事件绑定机制on()的使用技巧
2013/04/26 Javascript
JQuery结合CSS操作打印样式的方法
2013/12/24 Javascript
使用GruntJS构建Web程序之安装篇
2014/06/04 Javascript
js在指定位置增加节点函数insertBefore()用法实例
2015/01/12 Javascript
原生javascript实现addClass,removeClass,hasClass函数
2016/02/25 Javascript
微信小程序图片轮播组件gallery slider使用方法详解
2018/01/31 Javascript
关于Vue在ie10下空白页的debug小结
2018/05/02 Javascript
vue-cli3脚手架的配置及使用教程
2018/08/28 Javascript
vue-element-admin 菜单标签失效的解决方式
2019/11/12 Javascript
Vue如何实现监听组件原生事件
2020/07/03 Javascript
[36:29]2018DOTA2亚洲邀请赛 4.1 小组赛 A组加赛 LGD vs TNC
2018/04/02 DOTA
python计算程序开始到程序结束的运行时间和程序运行的CPU时间
2013/11/28 Python
python中的__init__ 、__new__、__call__小结
2014/04/25 Python
Python中如何优雅的合并两个字典(dict)方法示例
2017/08/09 Python
Python通过future处理并发问题
2017/10/17 Python
更新修改后的Python模块方法
2019/03/03 Python
python中列表的切片与修改知识点总结
2019/07/23 Python
dpn网络的pytorch实现方式
2020/01/14 Python
python词云库wordcloud的使用方法与实例详解
2020/02/17 Python
python使用nibabel和sitk读取保存nii.gz文件实例
2020/07/01 Python
CSS实现的一闪而过的图片闪光效果
2014/04/23 HTML / CSS
纯HTML5+CSS3制作生日蛋糕代码
2016/11/16 HTML / CSS
国际花店:Pickup Flowers
2020/04/10 全球购物
linux面试相关问题
2012/08/11 面试题
毕业生求职简历中的自我评价
2013/10/18 职场文书
洗发水广告词
2014/03/13 职场文书
关于安全演讲稿
2014/05/09 职场文书
酒店管理毕业生自荐信
2014/05/25 职场文书
计划生育标语
2014/06/23 职场文书
泰坦尼克号观后感
2015/06/04 职场文书
初中化学教学反思
2016/02/22 职场文书
各种货币符号快捷输入
2022/02/17 杂记
Java界面编程实现界面跳转
2022/06/16 Java/Android