关于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 相关文章推荐
sina的lightbox效果。
Jan 09 Javascript
jquery选择器、属性设置用法经验总结
Sep 08 Javascript
简单时间提示DEMO从0开始一直进行计时
Nov 19 Javascript
JS实现侧悬浮浮动实例代码
Nov 29 Javascript
js弹窗返回值详解(window.open方式)
Jan 11 Javascript
JS实现完全语义化的网页选项卡效果代码
Sep 15 Javascript
JavaScript数据存储 Cookie篇
Jul 02 Javascript
js关于getImageData跨域问题的解决方法
Oct 14 Javascript
JavaScript的setter与getter方法
Nov 29 Javascript
解决Vue.js父组件$on无法监听子组件$emit触发事件的问题
Sep 12 Javascript
记一次vue-webpack项目优化实践详解
Feb 17 Javascript
详解TypeScript+Vue 插件 vue-class-component的使用总结
Feb 18 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隐藏实际地址的文件下载方法
2015/04/18 PHP
php实现仿写CodeIgniter的购物车类
2015/07/29 PHP
PHP数组函数array_multisort()用法实例分析
2016/04/02 PHP
PHP线程的内存回收问题
2016/07/08 PHP
ASP.NET jQuery 实例10 动态修改hyperlink的URL值
2012/02/03 Javascript
JavaScript实现仿淘宝商品购买数量的增减效果
2016/01/22 Javascript
浅析javaScript中的浅拷贝和深拷贝
2017/02/15 Javascript
在js中做数字字符串补0(js补零)
2017/03/25 Javascript
JavaScript中使用import 和require打包后实现原理分析
2018/03/07 Javascript
JavaScript获取用户所在城市及地理位置
2018/04/21 Javascript
vue iview多张图片大图预览、缩放翻转
2019/07/13 Javascript
微信小程序webview 脚手架使用详解
2019/07/22 Javascript
jquery实现上传文件进度条
2020/03/26 jQuery
uniapp 仿微信的右边下拉选择弹出框的实现代码
2020/07/12 Javascript
python解析xml模块封装代码
2014/02/07 Python
跟老齐学Python之模块的加载
2014/10/24 Python
全面了解python字符串和字典
2016/07/07 Python
Python绘制3d螺旋曲线图实例代码
2017/12/20 Python
python判断文件是否存在,不存在就创建一个的实例
2019/02/18 Python
MxNet预训练模型到Pytorch模型的转换方式
2020/05/25 Python
Python如何获取文件指定行的内容
2020/05/27 Python
CSS3下的渐变文字效果实现示例
2018/03/02 HTML / CSS
智能钱包:Ekster
2019/11/21 全球购物
Watch Station官方网站:世界一流的手表和智能手表
2020/01/05 全球购物
英语系本科生求职信范文
2013/12/18 职场文书
2014年社区植树节活动方案
2014/02/28 职场文书
销售人员求职信
2014/07/22 职场文书
党员应该树立反腐倡廉的坚定意识思想汇报
2014/09/12 职场文书
民主生活会整改措施(党员)
2014/09/18 职场文书
乡镇务虚会发言材料
2014/10/20 职场文书
感谢信模板大全
2015/01/23 职场文书
2015年高中班级工作总结
2015/07/21 职场文书
高中班主任培训心得体会
2016/01/07 职场文书
十二月早安励志心语大全
2019/12/03 职场文书
Vue.js中v-bind指令的用法介绍
2022/03/13 Vue.js
win10截图快捷键win+shift+s没有反应无法截图怎么解决?
2022/08/14 数码科技