Vue组件入门(十一)$attrs

简介: Vue组件入门(十一)$attrs

前言


上一章我们说到,对于单个根元素的子组件来说,使用时在其上面声明的class、style以及事件等,会发生一个透传的行为。但有些时候,我想对透传的属性进行一个自定义继承。这个时候要怎么做呢?这就引出了我们今天的主角--$attrs。下面我们来看一看。


$attrs


我们可以通过$attrs访问透传进来的属性,不仅如此,$attrs 里面还包含了除组件所声明的 propsemits 之外的所有其他属性。


这样我们就可以自定义继承了。


<span>所有属性: {{ $attrs }}</span>
复制代码


但是,还有一点要注意的是,我们还要禁止组件的默认透传行为,这个时候我们就可以通过inheritAttrs属性,设为 false 来进行禁用。


如果使用了<script setup>,就需要一个额外的 <script> 标签来添加这个选项:


<script>
export default {
  inheritAttrs: false
}
</script>
<script setup>
// ...setup 部分逻辑
</script>
复制代码


注意:

  • 透传的属性会保留大小写,所以像这 title-n 样的一个 属性 需要通过 $attrs['title-n'] 来访问。
  • 透传的v-on 事件监听器可以通过$attrs.onClick进行访问。


对于多根节点的组件,没有自动的透传行为。如果$attrs没有显示绑定的话,vue会进行一个警告。


所以,对于这种情况的话,需要对其显示绑定:


<header>...</header>
<main v-bind="$attrs">...</main>
<footer>...</footer>
复制代码


js中访问$attrs


如果想要在<script setup>访问透传下来的属性的话,需要通过vue 提供的 useAttrs() API来进行访问透传的所有属性:


<script setup>
import { useAttrs } from 'vue'
const attrs = useAttrs()
</script>
复制代码


有一点需要需要注意的是,useAttrs()得到的attrs并不是响应式的,也就意味着你不能通过侦听器监听他的变化。


所以,需要响应式的话,建议还是props,或者在onUpdated()声明周期内,获得最新的$attrs。

相关文章
|
6天前
|
移动开发 JavaScript API
Vue Router 核心原理
Vue Router 是 Vue.js 的官方路由管理器,用于实现单页面应用(SPA)的路由功能。其核心原理包括路由配置、监听浏览器事件和组件渲染等。通过定义路径与组件的映射关系,Vue Router 将用户访问的路径与对应的组件关联,支持哈希和历史模式监听 URL 变化,确保页面导航时正确渲染组件。
|
10天前
|
监控 JavaScript 前端开发
ry-vue-flowable-xg:震撼来袭!这款基于 Vue 和 Flowable 的企业级工程项目管理项目,你绝不能错过
基于 Vue 和 Flowable 的企业级工程项目管理平台,免费开源且高度定制化。它覆盖投标管理、进度控制、财务核算等全流程需求,提供流程设计、部署、监控和任务管理等功能,适用于企业办公、生产制造、金融服务等多个场景,助力企业提升效率与竞争力。
60 12
|
6天前
|
JavaScript 前端开发 开发者
Vue中的class和style绑定
在 Vue 中,class 和 style 绑定是基于数据驱动视图的强大功能。通过 class 绑定,可以动态更新元素的 class 属性,支持对象和数组语法,适用于普通元素和组件。style 绑定则允许以对象或数组形式动态设置内联样式,Vue 会根据数据变化自动更新 DOM。
|
6天前
|
JavaScript 前端开发 数据安全/隐私保护
Vue Router 简介
Vue Router 是 Vue.js 官方的路由管理库,用于构建单页面应用(SPA)。它将不同页面映射到对应组件,支持嵌套路由、路由参数和导航守卫等功能,简化复杂前端应用的开发。主要特性包括路由映射、嵌套路由、路由参数、导航守卫和路由懒加载,提升性能和开发效率。安装命令:`npm install vue-router`。
|
JavaScript
Vue的非父子组件之间传值
全局事件总线 一种组件间通信的方式,适用于任意组件间通信
|
缓存 JavaScript 前端开发
Vue Props、Slot、v-once、非父子组件间的传值....
Vue Props、Slot、v-once、非父子组件间的传值....
102 0
|
JavaScript
Vue中父子组件传值
先在⽗组件中给⼦组件的⾃定义属性绑定⼀个⽗组件的变量
|
JavaScript
vue 组件传值
vue 组件传值
97 0
|
JavaScript
vue父子组件传值
vue父子组件传值
|
JavaScript
vue兄弟组件传值 方便快捷
vue兄弟组件传值 方便快捷

热门文章

最新文章