Loading [MathJax]/jax/output/CommonHTML/jax.js
前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
社区首页 >专栏 >vue $listeners $attr_vue query

vue $listeners $attr_vue query

作者头像
全栈程序员站长
发布于 2022-11-07 09:20:02
发布于 2022-11-07 09:20:02
3.7K00
代码可运行
举报
运行总次数:0
代码可运行
1、vm.$attrs
  • 2.4.0新增
  • 类型 { [key: string]: string }
  • 只读
  • 详细 包含了父作用域中不作为 prop 被识别 (且获取) 的特性绑定 (class 和 style 除外)。当一个组件没有声明任何prop 时,这里会包含所有父作用域的绑定 (class 和 style 除外),并且可以通过 v-bind=”$attrs” 传入内部组件——在创建高级别的组件时非常有用。 简单点讲就是包含了所有父组件在子组件上设置的属性(除了prop传递的属性、class 和 style )。
代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
   <div id="app">
<base-input
label="姓名"
class="name-input"
placeholder="请输入姓名"
test-attrs="$attrs"
></base-input>
</div>
Vue.component("base-input", { 

inheritAttrs: true, //此处设置禁用继承特性
props: ["label"],
template: ` <label> { 
{label}}- { 
{$attrs.placeholder}}- <input v-bind="$attrs"/> </label> `,
mounted: function() { 

console.log(this.$attrs);
}
});
const app = new Vue({ 

el: "#app"
});

在生命周期方法mounted中打印attrs” 传入子组件内部的input标签

2、 vm.$listeners
  • 2.4.0新增
  • 类型 { [key: string]: Function | Array }
  • 只读
  • 详细 包含了父作用域中的 (不含 .native 修饰器的) v-on 事件监听器。它可以通过 v-on=”listeners” 将事件监听指向这个组件内的子元素(包括内部的子组件)。 为了查看方便,我们设置inheritAttrs: true,后面补充一下inheritAttrs。
代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>arrs与listeners</title>
<script src="https://cdn.jsdelivr.net/npm/vue/dist/vue.js"></script>
</head>
<body>
<div id="app">
<child1 :a-child1="aChild1" :a-child2="aChild2" name1="组件1" name2="组件2" attrs='attrs' @test1="test1" @test2="test2"></child1>
</div>
<!-- 主要是理解$attrs与$listeners这两个属性-->
<script>
Vue.component('child1',{ 

inheritAttrs: true,
props:['a-child1'],
mounted(){ 

console.log(this.$attrs);
console.log(this.$listeners);
},
methods:{ 

test1(){ 

this.$emit('test1')
}
},
template:`<div>{ 
{$attrs.name1}}:{ 
{aChild1}}</br> attrs:{ 
{this.$attrs}}</br><button @click="test1">test1</button><child2 v-on="$listeners" v-bind='$attrs'></child2></div>`
});
Vue.component('child2',{ 

inheritAttrs: true,
props:['a-child2'],
mounted(){ 

console.log(this.$attrs);
console.log(this.$listeners);
},
template:`<div>{ 
{$attrs.name2}}:{ 
{aChild2}}</br> attrs:{ 
{this.$attrs}}</br> <button @click='$listeners.test2'>test2</button></div>`
});
var app = new Vue({ 

el:"#app",
data:{ 

aChild1:'加油',
aChild2:'努力',
},
methods:{ 

test1(){ 

console.log('child1---')
},
test2(){ 

console.log('child2---')
}
}
});
</script>
</body>
</html>

上例中,父组件在child1组件中设置两个监听事件test1和test2,分别在child1组件和child1组件内部的child2组件中执行。还设置了三个属性aChild1、aChild2、name1、name2、attrs。其中aChild1、aChild2被对应的组件的prop识别。所以: child1组件中attrs为{ “name1”: “组件1”, “name2”: “组件2”, “attrs”: “attrs” } 效果如下图:

child1组件中的\listeners打印的内容,其中\

child2组件中的listeners打印的内容

3、inheritAttrs
  • 2.4.0新增
  • 类型 boolean
  • 默认值:true
  • 详细 默认情况下父作用域的不被认作 props 的特性绑定 (attribute bindings) 将会“回退”且作为普通的 HTML 特性应用在子组件的根元素上。当撰写包裹一个目标元素或另一个组件的组件时,这可能不会总是符合预期行为。通过设置 inheritAttrs 到false,这些默认行为将会被去掉。而通过 (同样是 2.4 新增的) 实例属性 attrs,子组件通过
注意:这个选项不影响 class 和 style 绑定

vm.$listeners的案例如果 inheritAttrs设置为false,html显示如下:

如果inheritAttrs设置为true,html显示如下:

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。

发布者:全栈程序员栈长,转载请注明出处:https://javaforall.cn/183676.html原文链接:https://javaforall.cn

本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2022年10月10日,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
暂无评论
推荐阅读
编辑精选文章
换一批
8种vue组件通信方式详细解析实例
对于vue来说,组件是非常常见的,有很多平台都封装了了属于自己一套的组件,如element ui、we ui等等。同时组件之间的消息传递也是非常重要的,下面是我对组件之间消息传递的各种方式的总结,共有8种方式。如有不足之处,可以留言补充,互相学习。
Javanx
2019/09/04
7710
8种vue组件通信方式详细解析实例
一面高频vue面试题
eventBus事件总线适用于父子组件、非父子组件等之间的通信,使用步骤如下: (1)创建事件中心管理组件之间的通信
bb_xiaxia1998
2022/10/28
8100
Vue 新增的$attrs与$listeners的详解
inheritAttrs:默认值true,继承所有的父组件属性(除props的特定绑定)作为普通的HTML特性应用在子组件的根元素上,如果你不希望组件的根元素继承特性设置inheritAttrs: false,但是class属性会继承(简单的说,inheritAttrs:true 继承除props之外的所有属性;inheritAttrs:false 只继承class属性)
tianyawhl
2019/04/04
2.7K0
vue面试经常会问的那些题
时间复杂度: 个树的完全diff 算法是一个时间复杂度为O(n*3) ,vue进行优化转化成O(n) 。
bb_xiaxia1998
2022/11/08
1K0
vue系列之面试总结
答:Vue 实例从创建到销毁的过程,就是生命周期。也就是从开始创建、初始化数据、编译模板、挂载 Dom→渲染、更新→渲染、卸载等一系列过程,我们称这是 Vue 的生命周期。 它的生命周期中有多个事件钩子,让我们在控制整个Vue实例的过程时更容易形成好的逻辑。
桃翁
2019/05/31
1.1K0
Vue中 $attrs、$listeners 详解及使用
传送门:Vue中 子组件向父组件传值 及 .sync 修饰符 详解 传送门:Vue中 状态管理器(vuex)详解及应用场景 传送门:Vue中 事件总线(eventBus)详解及使用 传送门:Vue中 provide、inject 详解及使用
全栈程序员站长
2022/11/02
1.6K0
Vue-组件之间常用的通信方式
Vue 组件之间常用的通信方式 props 总线 eventbus vuex 自定义事件 关系情况 $parent $children $root $refs provide/inject 非 prop 特性 $attrs $listener props 父->子传值 用属性 parent <child :faData = '来自父亲'></child> child props:{ faData:{ type:String, default:""
一只眠羊
2021/03/25
6690
Vue2.4中$attrs和$listeners的使用-学习笔记
在很多开发情况下,我们只是想把A组件的信息传递给C组件,如果使用props 绑定来进行信息的传递,虽然能够实现,但是代码并不美观。
全栈程序员站长
2022/11/02
9880
Vue2.4中$attrs和$listeners的使用-学习笔记
【Vue课堂】Vue.js 父子组件之间通信的十种方式
这篇文章介绍了Vue.js 父子组件之间通信的十种方式,不管是初学者还是已经在用 Vue 的开发者都会有所收获。无可否认,现在无论大厂还是小厂都已经用上了 Vue.js 框架,简单易上手不说,教程详尽,社区活跃,第三方套件还多。真的是前端开发人员必备技能。而且在面试当中也往往会问到关于 Vue 方面的各种问题,其中大部分面试官会问到如上这种问题。
用户4962466
2019/10/16
7690
前端常考vue面试题(必备)_2023-03-15
computed 内部实现了一个惰性的 watcher,也就是 computed watcher,computed watcher 不会立刻求值,同时持有一个 dep 实例。
yyds2026
2023/03/15
1.1K0
阿里前端常考vue面试题汇总_2023-02-27
使用mapGetters辅助函数, 利用对象展开运算符将getter混入computed 对象中
用户10358241
2023/02/27
8080
Vue2高版本新特性的总结及其使用
在项目开发中,如果业务比较复杂,特别像中台或B端功能页面都不可避免的会用到第三方组件库,产品有时会想对这些组件进行一些UI方面的定制。如果这些组件采用的是有作用域的CSS,父组件想要定制第三方组件的样式就比较麻烦了。
javascript.shop
2019/10/30
9190
腾讯二面vue面试题总结
对象内部通过 defineReactive 方法,使用 Object.defineProperty 来劫持各个属性的 setter、getter(只会劫持已经存在的属性),数组则是通过重写数组7个方法来实现。当页面使用对应属性时,每个属性都拥有自己的 dep 属性,存放他所依赖的 watcher(依赖收集),当属性变化后会通知自己对应的 watcher 去更新(派发更新)
bb_xiaxia1998
2022/11/18
7350
Vue组件数据通信方案总结
初识Vue.js,了解到组件是Vue的主要构成部分,但组件内部的作用域是相对独立的部分,组件之间的关系一般如下图:
青梅煮码
2023/01/12
1.7K0
Vue.js-自定义事件例子 原
一个组件上的 v-model 默认会利用名为 value 的 prop 和名为 input 的事件,但是像单选框、复选框等类型的输入控件可能会将 value 特性用于不同的目的。model 选项可以用来避免这样的冲突:
tianyawhl
2019/04/04
1.7K0
Vue2.x组件间通信汇总表
Dear,大家好,我是“前端小鑫同学”,😇长期从事前端开发,安卓开发,热衷技术,在编程路上越走越远~ 分享一篇以前做Vue2.x开发时总结的组件通信汇总 一、组件间通信方式表 序号 方式 使用场景 演示代码 说明 1 props 父=>子(属性传参) √ 接收数据: 子组件中props定义接收; 派发数据: 父组件中绑定数据进行派发 2 $emit/$on 子=>父组件通信(事件传参) √ 接收数据: 父组件调用$on/v-on; 派发数据: 子组件调用$emit() 3 event bus 兄弟组件通信
前端小鑫同学
2022/12/26
4360
Vue 组件数据通信方案总结
初识 Vue.js ,了解到组件是 Vue 的主要构成部分,但组件内部的作用域是相对独立的部分,组件之间的关系一般如下图:
前端迷
2019/09/25
4440
Vue 组件数据通信方案总结
10个简单的技巧让你的 vue.js 代码更优雅
作为深度代码洁癖,我们都希望能写出简单高效的代码,让我们的代码看起来更加优雅,让我们抛弃繁杂的代码,一起开启简单的旅程~~
王小婷
2020/11/10
1.1K0
腾讯前端常考vue面试题整理
DOM操作是非常昂贵的,因此我们需要尽量地减少DOM操作。这就需要找出本次DOM必须更新的节点来更新,其他的不更新,这个找出的过程,就需要应用diff算法
bb_xiaxia1998
2022/10/25
4930
Vue案例引发的「嵌套组件」通信的简单方式
我们都知道 Vue 是采用组件化开发的模式,组件化的优势在于相对独立,易于维护,可复用。你可以把项目看成许多组件的组合而成。
六小登登
2019/03/11
8860
Vue案例引发的「嵌套组件」通信的简单方式
相关推荐
8种vue组件通信方式详细解析实例
更多 >
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档