Loading [MathJax]/jax/output/CommonHTML/fonts/TeX/AMS-Regular.js
前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
社区首页 >专栏 >vue $attrs的使用

vue $attrs的使用

作者头像
全栈程序员站长
发布于 2022-11-02 09:19:42
发布于 2022-11-02 09:19:42
1.4K00
代码可运行
举报
运行总次数:0
代码可运行

$attrs的使用 vue

  • $attrs是在vue的2.40版本以上添加的。
  • 项目中有多层组件传参可以使用attrs使便使propemit,
  • 如果给组件传递的数据,组件不使用props接收,那么这些数据将作为组件的HTML元素的特性,这些特性绑定在组件的HTML根元素上
  • inheritAttrs: false的含义是不希望本组件的根元素继承父组件的attribute,同时父组件传过来的属性(没有被子组件的props接收的属性),也不会显示在子组件的dom元素上,但是在组件里可以通过其$attrs可以获取到没有使用的注册属性, “inheritAttrs: false`是不会影响 style 和 class 的绑定
  • 以下是$attrs的使用示例(父组件的列表行数据传递给孙子组件展示)
  1. 父组件(Father.vue),给子组件关联数据,子组件如果不用props接收,那么这些数据就作为普通的HTML特性应用在子组件的根元素上
代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
<template>
<div>
<el-table :data='list'>
<el-table-column
prop="name"
label="姓名"
></el-table-column>
<el-table-column
prop="study"
label="学习科目"
></el-table-column>
<el-table-column label="操作">
<template slot-scope="scope">
<el-button @click='transmitClick(scope.row)'>传递</el-button>
</template>
</el-table-column>
</el-table>
<!-- 儿子组件 -->
<ChildView
:is-show="isOpen"
:row="row"
>
</ChildView>
</div>
</template>
<script>
import ChildView from './Child.vue'
export default { 

components: { 
 ChildView },
data() { 

return { 

isOpen: false,
row: { 
},
list: [
{ 
 name: '王丽', study: 'Java' },
{ 
 name: '李克', study: 'Python' }
]
}
},
methods: { 

// 传递事件
transmitClick(row) { 

this.isOpen = true;
this.row = row
}
}
}
</script>
  1. 儿子组件(Child.vue),中间层,作为父组件和孙子组件的传递中介,在儿子组件中给孙子组件添加v-bind="$attrs",这样孙子组件才能接收到数据
代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
<template>
<div class='child-view'>
<p>儿子组件</p>
<GrandChild v-bind="$attrs"></GrandChild>
</div>
</template>
<script>
import GrandChild from './GrandChild.vue'
export default { 

// 继承所有父组件的内容
inheritAttrs: true,
components: { 
 GrandChild },
data() { 

return { 

}
}
}
</script>
<style lang="stylus">
.child-view { 

margin: 20px
border: 2px solid red
padding: 20px
}
</style>
  1. 孙子组件(GrandChild.vue),在孙子组件中一定要使用props接收从父组件传递过来的数据
代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
<template>
<div class='grand-child-view'>
<p>孙子组件</p>
<p>传给孙子组件的数据:{ 
{ 
row.name}} { 
{ 
row.name !== undefined? '学习' : ''}} { 
{ 
row.study}}</p>
</div>
</template>
<script>
export default { 

// 不想继承所有父组件的内容,同时也不在组件根元素dom上显示属性
inheritAttrs: false,
// 在本组件中需要接收从父组件传递过来的数据,注意props里的参数名称不能改变,必须和父组件传递过来的是一样的
props: { 

isShow: { 

type: Boolean,
dedault: false
},
row: { 

type: Object,
dedault: () => { 
 }
}
}
}
</script>
<style lang="stylus">
.grand-child-view { 

border: 2px solid green
padding: 20px
margin: 20px
}
</style>

结果:

在上面提过,如果给子组件传递的数据,子组件不使用props接收,那么这些数据将作为子组件的特性,这些特性绑定在组件的HTML根元素上,在vue2.40版本之后,可以通过inheritAttrs = false 来控制这些特性是否显示在dom元素上 如:案例中父组件给子组件传递的row和isShow,子组件没有使用props接收,这个2个数据直接作为HTML的特殊属性。子组件使用inheritAttrs = true,那么特性显示在dom上,如果设置为false,那么特性不显示在dom上

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

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

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

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

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

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

评论
登录后参与评论
暂无评论
推荐阅读
编辑精选文章
换一批
vue的$attrs_vue获取list集合中的对象
原文网址:Vue–attrs, listeners–使用/教程/实例_IT利刃出鞘的博客-CSDN博客
全栈程序员站长
2022/09/27
5.3K0
Vue2高版本新特性的总结及其使用
在项目开发中,如果业务比较复杂,特别像中台或B端功能页面都不可避免的会用到第三方组件库,产品有时会想对这些组件进行一些UI方面的定制。如果这些组件采用的是有作用域的CSS,父组件想要定制第三方组件的样式就比较麻烦了。
javascript.shop
2019/10/30
9210
Vue 新增的$attrs与$listeners的详解
inheritAttrs:默认值true,继承所有的父组件属性(除props的特定绑定)作为普通的HTML特性应用在子组件的根元素上,如果你不希望组件的根元素继承特性设置inheritAttrs: false,但是class属性会继承(简单的说,inheritAttrs:true 继承除props之外的所有属性;inheritAttrs:false 只继承class属性)
tianyawhl
2019/04/04
2.7K0
Vue2.4中$attrs和$listeners的使用-学习笔记
在很多开发情况下,我们只是想把A组件的信息传递给C组件,如果使用props 绑定来进行信息的传递,虽然能够实现,但是代码并不美观。
全栈程序员站长
2022/11/02
9970
Vue2.4中$attrs和$listeners的使用-学习笔记
【Vue.js——ElementUi】element-ui 组件二次封装(蓝桥杯真题-2276)【合集】
element-ui 官网上具有单选功能的表格 demo 为:点击表格下方的按钮可以选中指定的某行数据。效果如下:
Rossy Yan
2025/01/24
1570
【Vue.js——ElementUi】element-ui 组件二次封装(蓝桥杯真题-2276)【合集】
Vue中 $attrs、$listeners 详解及使用
传送门:Vue中 子组件向父组件传值 及 .sync 修饰符 详解 传送门:Vue中 状态管理器(vuex)详解及应用场景 传送门:Vue中 事件总线(eventBus)详解及使用 传送门:Vue中 provide、inject 详解及使用
全栈程序员站长
2022/11/02
1.7K0
八种 Vue 组件间通讯方式合集
Vue 提供了各种各样的通讯,其中包括兄弟间的通讯和非兄弟间的通讯,借此机会做个总结,查阅起来方便。
小丑同学
2020/09/21
1K0
腾讯前端常考vue面试题整理
DOM操作是非常昂贵的,因此我们需要尽量地减少DOM操作。这就需要找出本次DOM必须更新的节点来更新,其他的不更新,这个找出的过程,就需要应用diff算法
bb_xiaxia1998
2022/10/25
5010
Vue.js 的一些小技巧
比如一个 <my-button> 上暴露了一个 width 属性,我们既可以传 100px,也可以传 100 :
步履不停凡
2019/09/11
8100
腾讯前端一面常考vue面试题汇总2
vue构建函数调用_init方法,但我们发现本文件中并没有此方法,但仔细可以看到文件下方定定义了很多初始化方法
bb_xiaxia1998
2023/01/04
6730
腾讯二面vue面试题总结
对象内部通过 defineReactive 方法,使用 Object.defineProperty 来劫持各个属性的 setter、getter(只会劫持已经存在的属性),数组则是通过重写数组7个方法来实现。当页面使用对应属性时,每个属性都拥有自己的 dep 属性,存放他所依赖的 watcher(依赖收集),当属性变化后会通知自己对应的 watcher 去更新(派发更新)
bb_xiaxia1998
2022/11/18
7450
Vue
通过前面的介绍,我们对目前的项目工程化有了大体了了解,那么其中,在第二阶段的工程化演进中,有一个重要的工程设计理念诞生,他就是著名的 MVC 设计模式,简单点,MVC 其实就是为了项目工程化的一种分工模式;
jinghong
2020/05/12
7.1K0
Vue
vue组件通讯之$attrs
我们会遇到这样的场景,比如对element-ui的el-table组件进行二次开发,但是el-table组件有很多属性比如控制高度的height,传入数据的data还有border、size、fit等一个个的去传显然不大现实,这个使用用$attrs处理起来就会特别优雅。
全栈程序员站长
2022/11/02
3880
vue $listeners $attr_vue query
在生命周期方法mounted中打印attrs,显示除了class和props定义的属性之外的其他属性。 通过 v-bind=”attrs” 传入子组件内部的input标签
全栈程序员站长
2022/11/07
3.7K0
vue $listeners $attr_vue query
关于 Vue3 + setup + ts 使用技巧的总结
ref 一般用于基本的数据类型,比如 string,boolean ,reactive 一般用于对象 ref 的地方其实也是调用的 reactive 实现的。
前端达人
2023/08/31
1.1K0
关于 Vue3 + setup + ts 使用技巧的总结
2020年,vue面试遇到的问题(上)
原文有 36 到 vue 常用面试题,考虑到太多一次也看不完,所以分为 上、中、下三篇,如果你能读完这三篇文章,相信你在面试中 vue 的问题你不会怕了。
桃翁
2020/03/13
2K0
全面了解 Vue.js 函数式组件
如果你是一位前端开发者,又在某些机会下阅读过一些 Java 代码,可能会在后者中看到一种类似 ES6 语法中箭头函数的写法
江米小枣
2021/11/02
2.9K0
百度前端一面高频vue面试题汇总_2023-02-28
递归组件编译结果中,获取组件时会传递一个标识符 _resolveComponent("Comp", true)
用户10358241
2023/02/28
9220
熬夜整理的vue面试题
vue-router 有 3 种路由模式:hash、history、abstract,对应的源码如下所示
bb_xiaxia1998
2022/11/16
7980
校招前端二面高频vue面试题
在Vue中,对响应式处理利用的是Object.defineProperty对数据进行拦截,而这个方法并不能监听到数组内部变化,数组长度变化,数组的截取变化等,所以需要对这些操作进行hack,让Vue能监听到其中的变化。 那Vue是如何实现让这些数组方法实现元素的实时更新的呢,下面是Vue中对这些方法的封装:
bb_xiaxia1998
2022/12/20
1.5K0
相关推荐
vue的$attrs_vue获取list集合中的对象
更多 >
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档