千家信息网

vue3 $attrs和inheritAttrs怎么用

发表于:2025-01-18 作者:千家信息网编辑
千家信息网最后更新 2025年01月18日,今天小编给大家分享一下vue3 $attrs和inheritAttrs怎么用的相关知识点,内容详细,逻辑清晰,相信大部分人都还太了解这方面的知识,所以分享这篇文章给大家参考一下,希望大家阅读完这篇文章
千家信息网最后更新 2025年01月18日vue3 $attrs和inheritAttrs怎么用

今天小编给大家分享一下vue3 $attrs和inheritAttrs怎么用的相关知识点,内容详细,逻辑清晰,相信大部分人都还太了解这方面的知识,所以分享这篇文章给大家参考一下,希望大家阅读完这篇文章后有所收获,下面我们一起来了解一下吧。

    $attrs和inheritAttrs用法

    • $attrs属性解释:包含了父作用域中不作为组件 props 或自定义事件的 attribute 绑定和事件。当一个组件没有声明任何prop 时,这里会包含所有父作用域的绑定,并且可以通过 v-bind="$attrs" 传入内部组件——这在创建高阶的组件时会非常有用。

    • inheritAttrs属性解释:如果你不希望组件的根元素继承特性,你可以在组件的选项中设置 inheritAttrs: false

    可能不是很好理解,我们可以举个例子来验证一下。

    在父组件app.vue中

    子组件 myInput.vue 设置 inheritAttrs: true(默认)

    子组件 myInput.vue 设置 inheritAttrs: false

    小结:

    由上述例子可以看出,子组件的props中未注册父组件传递过来的属性。

    • 当设置inheritAttrs:true时,子组件的顶层标签元素中会渲染出父组件传递过来的属性(例如:type="text"等)

    • 当设置inheritAttrs: false时,子组件的顶层标签元素中不会渲染出父组件传递过来的属性

    • 不管inheritAttrs为true或者false,子组件中都能通过$attrs属性获取到父组件中传递过来的属性。

    $attrs和inheritAttrs实例

    官网的文档简短而又不清晰,实在是看不懂,只好自己找代码验证来看看是什么意思:

                 Document         

    页面显示的结果:

    v1 is value1

    v2 is value2

    v3 is value3

    页面源代码:

    v1 is value1

    v2 is value2

    v3 is value3

    控制台打印是当前组件的$attrs:

    father: Proxy {v2: "value2", v3: "value3", __vInternal: 1}

    son: Proxy {v3: "value3", some: 1, __vInternal: 1}

    grandSon: Proxy {some: 1, __vInternal: 1}

    首选,father组件被传入了3个值,但是实际使用props接收的只有v1,v2和v3作为attributes在DOM里面渲染了。

    上图的devtool 也可以说明,另外就是控制台也同时证明了。

    同样son组件只是接收v2作为prop:

    grandSon组件只是接收v3作为prop

    father prop:v1,attributes: v2,v3

    son prop:v2 ,attributes:v3,some

    grandSon prop:v3,,attributes: some

    发现无论是father传入的3个值v1,v2,v3还是son又传入的值':some=1',

    只要不被prop传入下一层组件,那么一定是在下一层组件的$attrs,也就是说不被作为prop的值会传入下一个组件作为attrs的一员。一个组件的attrs由父组件传递以及自己自带的组合而成。

    上面说的是$attrs,那么inheritAttrs则说的是attrs继承,这里的继承是控制DOM渲染,不继承也就是不渲染了,但是实际还是存在这个attrs的。

    `inheritAttrs`属性默认是true,所以能看到上面的结论,attrs会往下传,当设置为false的时候就不会在DOM渲染从上一层继承来的attrs。

    修改一下代码:

    app.component('father', {   inheritAttrs: false,    // 不继承    props: ['v1'],    template: ` 

    v1 is {{v1}}

    `, created() { console.log('father:', this.$attrs) }})

    father组件这不继承attrs,控制台的打印没变:

    father: Proxy {v2: "value2", v3: "value3", __vInternal: 1}

    son: Proxy {v3: "value3", some: 1, __vInternal: 1}

    grandSon: Proxy {some: 1, __vInternal: 1}

    devtool这里依然可以看到attrs

    但是看源代码:

    v1 is value1

    v2 is value2

    v3 is value3

    DOM渲染里面的v2,v3 attrs都不存在了。

    以上就是"vue3 $attrs和inheritAttrs怎么用"这篇文章的所有内容,感谢各位的阅读!相信大家阅读完这篇文章都有很大的收获,小编每天都会为大家更新不同的知识,如果还想学习更多的知识,请关注行业资讯频道。

    组件 属性 知识 篇文章 控制 元素 控制台 也就是 事件 代码 作用 内容 只是 实际 就是 标签 源代码 还是 面的 页面 数据库的安全要保护哪些东西 数据库安全各自的含义是什么 生产安全数据库录入 数据库的安全性及管理 数据库安全策略包含哪些 海淀数据库安全审计系统 建立农村房屋安全信息数据库 易用的数据库客户端支持安全管理 连接数据库失败ssl安全错误 数据库的锁怎样保障安全 数据库无 新金融生态网络安全 相机修复数据库 手机网络安全防护怎么关 江苏信息软件开发供应商 kegg数据库blast 数据库服务器提供远程监控录像 友客连锁便利店软件开发工程师 戴尔数据库一体机 门禁系统软件开发合同 百度再见网络技术北京有限公撕夜 红外测温软件开发目的 电子软件开发行业的机会 流放者柯南如何转服务器 梦幻西游手游转回服务器 陕西奇虎网络技术有限公司 网络安全工程师是计算机专业吗 大学生从事软件开发需要学习吗 软件开发实例费用明细 日照安卓软件开发哪家做的好 android软件开发it技术 数据库中邮箱可以是int型吗 软件开发和网页设计哪个好 网络安全实践报告目的 安徽6端口网络安全硬件设备厂家 余姚计算机软件开发工程 临邑软件开发教学课程 软件开发 考试提纲 四川电商软件开发哪家可靠 莆田外贸软件开发
    0