关于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学习笔记二 实现可编辑的表格
Apr 09 Javascript
MyEclipse取消验证Js的两种方法
Nov 14 Javascript
jquery datepicker参数介绍和示例
Apr 15 Javascript
AngularJS 遇到的小坑与技巧小结
Jun 07 Javascript
jquery层级选择器(匹配父元素下的子元素实现代码)
Sep 05 Javascript
JavaScript中cookie工具函数封装的示例代码
Oct 11 Javascript
jQuery EasyUI ProgressBar进度条组件
Feb 28 Javascript
原生js+cookie实现购物车功能的方法分析
Dec 21 Javascript
vue实现文章内容过长点击阅读全文功能的实例
Dec 28 Javascript
Node.js系列之发起get/post请求(2)
Aug 30 Javascript
vue倒计时刷新页面不会从头开始的解决方法
Mar 03 Javascript
Flexible.js可伸缩布局实现方法详解
Nov 13 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
flash用php连接数据库的代码
2011/04/21 PHP
解析WordPress中控制用户登陆和判断用户登陆的PHP函数
2016/03/01 PHP
使用php实现网站验证码功能【推荐】
2017/02/09 PHP
thinkPHP5.0框架开发规范简介
2017/03/25 PHP
PHP 中 var_export、print_r、var_dump 调试中的区别
2018/06/19 PHP
再谈IE中Flash控件的自动激活 ObjectWrap
2007/03/09 Javascript
jquery通过load获取文件的内容并跳到锚点的方法
2015/01/29 Javascript
jquery关于事件冒泡和事件委托的技巧及阻止与允许事件冒泡的三种实现方法
2015/11/27 Javascript
正则表达式,替换所有HTML标签的简单实例
2016/11/28 Javascript
Highcharts+NodeJS搭建数据可视化平台示例
2017/01/01 NodeJs
利用Js+Css实现折纸动态导航效果实例源码
2017/01/25 Javascript
Ajax异步文件上传与NodeJS express服务端处理
2017/04/01 NodeJs
nodejs接入阿里大鱼短信验证码的方法
2017/07/10 NodeJs
nodejs中方法和模块用法示例
2018/12/24 NodeJs
Node.js系列之连接DB的方法(3)
2019/08/30 Javascript
Vue 组件的挂载与父子组件的传值实例
2020/09/02 Javascript
python实现电子词典
2020/04/23 Python
给Python初学者的一些编程技巧
2015/04/03 Python
Python解决抛小球问题 求小球下落经历的距离之和示例
2018/02/01 Python
用Python编写一个简单的CS架构后门的方法
2018/11/20 Python
python读取目录下最新的文件夹方法
2018/12/24 Python
浅谈Python 多进程默认不能共享全局变量的问题
2019/01/11 Python
Python mutiprocessing多线程池pool操作示例
2019/01/30 Python
djano一对一、多对多、分页实例代码
2019/08/16 Python
Python多线程爬取豆瓣影评API接口
2019/10/22 Python
Pandas-Cookbook 时间戳处理方式
2019/12/07 Python
解析html5 canvas实现背景鼠标连线动态效果代码
2019/06/17 HTML / CSS
详解淘宝H5 sign加密算法
2020/08/25 HTML / CSS
英国街头品牌:Bee Inspired Clothing
2018/02/12 全球购物
分别介绍一下Session Bean和Entity Bean
2015/03/13 面试题
人力资源专员自我评价怎么写
2013/09/19 职场文书
中国梦读书活动总结
2014/07/10 职场文书
民事诉讼代理授权委托书
2014/10/11 职场文书
班主任自我评价范文
2015/03/11 职场文书
2016年优秀团员事迹材料
2016/02/25 职场文书
《艾尔登法环》1.03.3补丁上线 碎星伤害调整
2022/04/07 其他游戏