关于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 申明函数的三种方法 每个函数就是一个对象(一)
Dec 04 Javascript
jQuery实现图片信息的浮动显示实例代码
Aug 28 Javascript
Angularjs 滚动加载更多数据
Mar 17 Javascript
JavaScript是如何实现继承的(六种方式)
Mar 31 Javascript
第一次接触JS require.js模块化工具
Apr 17 Javascript
基于JavaScript实现带缩略图的轮播效果
Jan 12 Javascript
基于JS实现翻书效果的页面切换样式
Feb 16 Javascript
js中let和var定义变量的区别
Feb 08 Javascript
vue二级菜单导航点击选中事件的方法
Sep 12 Javascript
iView-admin 动态路由问题的解决方法
Oct 03 Javascript
微信小程序事件 bindtap bindinput代码实例
Aug 26 Javascript
React如何使用axios请求数据并把数据渲染到组件
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 显示指定路径下的图片
2009/10/29 PHP
php使用百度天气接口示例
2014/04/22 PHP
学习php设计模式 php实现观察者模式(Observer)
2015/12/09 PHP
php微信公众号开发之音乐信息
2018/10/20 PHP
PHP单例模式模拟Java Bean实现方法示例
2018/12/07 PHP
PHP检查文件是否存在,不存在自动创建及读取文件内容操作示例
2020/01/23 PHP
PHP code 验证码生成类定义和简单使用示例
2020/05/27 PHP
PHP实现简单的计算器
2020/08/28 PHP
PHP7 整型处理机制修改
2021/03/09 PHP
匹配任意字符的正则表达式写法
2010/04/29 Javascript
JavaScript 原型链学习总结
2010/10/29 Javascript
JS模板实现方法
2013/04/03 Javascript
JavaScript中的console.log()函数详细介绍
2014/12/29 Javascript
浅析Node.js中的内存泄漏问题
2015/06/23 Javascript
JavaScritp添加url参数并将参数加入到url中及更改url参数的方法
2015/10/26 Javascript
js实现跨域的4种实用方法原理分析
2015/10/29 Javascript
在Node.js中使用Javascript Generators详解
2016/05/05 Javascript
你知道setTimeout是如何运行的吗?
2016/08/16 Javascript
实现一个简单的vue无限加载指令方法
2017/01/10 Javascript
Node.js Event Loop各阶段讲解
2019/03/08 Javascript
JavaScript 实现轮播图特效的示例
2020/11/05 Javascript
利用Python实现简单的相似图片搜索的教程
2015/04/23 Python
python中计算一个列表中连续相同的元素个数方法
2018/06/29 Python
Python对列表的操作知识点详解
2019/08/20 Python
Python 面向对象之封装、继承、多态操作实例分析
2019/11/21 Python
Python turtle库的画笔控制说明
2020/06/28 Python
python实现视频压缩功能
2020/12/18 Python
python中常用的数据结构介绍
2021/01/12 Python
HTML5和CSS3让网页设计提升到下一个高度
2009/08/14 HTML / CSS
css3实现背景颜色渐变让图片不再是唯一的实现方式
2012/12/18 HTML / CSS
Foot Locker澳洲官网:美国运动服和鞋类零售商
2019/10/11 全球购物
浪漫婚礼主持词
2014/03/14 职场文书
银行柜员求职自荐书
2014/06/18 职场文书
先进工作者事迹材料
2014/12/23 职场文书
运动会闭幕式主持词
2015/07/01 职场文书
PostgreSQL解析URL的方法
2021/08/02 PostgreSQL