关于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窗口功能指南之在窗口中书写内容
Jul 21 Javascript
onbeforeunload与onunload事件异同点总结
Jun 24 Javascript
node.js中的fs.read方法使用说明
Dec 17 Javascript
AngularJS指令与控制器之间的交互功能示例
Dec 14 Javascript
HTML5+Canvas调用手机拍照功能实现图片上传(下)
Apr 21 Javascript
vue2利用Bus.js如何实现非父子组件通信详解
Aug 25 Javascript
原生js中ajax访问的实例详解
Sep 19 Javascript
Vue中android4.4不兼容问题的解决方法
Sep 04 Javascript
elementUI中Table表格问题的解决方法
Dec 04 Javascript
微信小程序picker组件关于objectArray数据类型的绑定方法
Mar 13 Javascript
layui 对table中的数据进行转义的实例
Sep 12 Javascript
vue+elementUI 实现内容区域高度自适应的示例
Sep 26 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
上海无线电三厂简史修改版
2021/03/01 无线电
分享下页面关键字抓取www.icbase.com站点代码(带asp.net参数的)
2014/01/30 PHP
PHP+Mysql+Ajax+JS实现省市区三级联动
2014/05/23 PHP
PHP使用file_get_contents发送http请求功能简单示例
2018/04/29 PHP
jQuery判断div随滚动条滚动到一定位置后停止
2014/04/02 Javascript
JS实现用户注册时获取短信验证码和倒计时功能
2016/10/27 Javascript
Nuxt.js踩坑总结分享
2018/01/18 Javascript
Vue中的异步组件函数实现代码
2018/07/20 Javascript
javascript实现遮罩层动态效果实例
2019/05/14 Javascript
[55:04]海涛DOTA2死魂复燃6.82版本介绍
2014/09/28 DOTA
用Python写的图片蜘蛛人代码
2012/08/27 Python
python条件和循环的使用方法
2013/11/01 Python
python使用tcp实现局域网内文件传输
2020/03/20 Python
Django框架设置cookies与获取cookies操作详解
2019/05/27 Python
PyQt4编程之让状态栏显示信息的方法
2019/06/18 Python
python爬虫刷访问量 2019 7月
2019/08/01 Python
python SVD压缩图像的实现代码
2019/11/05 Python
Python爬虫库BeautifulSoup获取对象(标签)名,属性,内容,注释
2020/01/25 Python
浅谈pycharm导入pandas包遇到的问题及解决
2020/06/01 Python
python获取linux系统信息的三种方法
2020/10/14 Python
python 视频下载神器(you-get)的具体使用
2021/01/06 Python
巧克力领导品牌瑞士莲美国官网:Lindt Chocolate美国
2016/08/25 全球购物
世界第一冲浪品牌:O’Neill
2016/08/30 全球购物
沙特阿拉伯排名第一的在线时尚购物应用程序:1Zillion
2020/08/08 全球购物
内刊编辑求职自荐书范文
2014/02/19 职场文书
四群教育工作实施方案
2014/03/26 职场文书
婚前协议书怎么写
2014/04/15 职场文书
家长通知书教师评语
2014/04/17 职场文书
爱护花草树木的标语
2014/06/11 职场文书
煤矿安全生产月活动总结
2014/07/05 职场文书
理财计划书
2014/08/14 职场文书
园艺专业毕业生求职信
2014/09/02 职场文书
老公婚前保证书
2015/02/28 职场文书
2015年公司工作总结
2015/04/25 职场文书
实习报告范文之电话客服岗位
2019/07/26 职场文书
企业内部管理控制:采购授权审批制度范本
2020/01/19 职场文书