0
点赞
收藏
分享

微信扫一扫

Vue--inheritAttrs--使用/教程/实例

斗米 2022-02-16 阅读 53


简介

说明

        本文用示例介绍Vue的inheritAttrs的用法。

官网

​​Prop — Vue.js​​

​​API — Vue.js​​

inheritAttrs简介

官网原话:默认情况下父作用域的不被认作 props 的特性绑定 (attribute bindings) 将会“回退”且作为普通的 HTML 特性应用在子组件的根元素上。当撰写包裹一个目标元素或另一个组件的组件时,这可能不会总是符合预期行为。通过设置 inheritAttrs 到 false,这些默认行为将会被去掉。而通过 (同样是 2.4 新增的) 实例属性 $attrs 可以让这些特性生效,且可以通过 v-bind 显性的绑定到非根元素上。

注意:这个选项不影响 class 和 style 绑定。

示例

初始版本

components/CompA.vue 

<template>
<div id="compA">
<comp-b type="checkbox">
</comp-b>
</div>
</template>
<script>
import CompB from "@/components/CompB";

export default {
components: {CompB},
};
</script>

components/CompB.vue

<template>
<input type="button" value="abc">
</template>
<script>
export default {
};
</script>

router/index.js

import Vue from 'vue'
import Router from 'vue-router'
import CompA from "@/components/CompA";

Vue.use(Router)
Vue.use(VueAxios, Axios);

export default new Router({
routes: [
{
path: '/compA',
name: '/compA',
component: CompA
}
]
})

测试

访问:​​http://localhost:8080/#/compA​​

结果:父组件的属性覆盖了子组件同名的属性

Vue--inheritAttrs--使用/教程/实例_官网

修改版

那如果我想要保留子组件的属性,还想要获得父组件同名类型的定义该怎么办呢?见下方

只修改components/compB.vue

<template>
<input type="button" value="abc" @click="showAttr">
</template>
<script>
export default {
inheritAttrs: false,
methods:{
showAttr() {
alert(this.$attrs.type)
}
}
};
</script>

测试

访问:​​http://localhost:8080/#/compA​​

结果:父组件的属性没有覆盖子组件同名的属性

Vue--inheritAttrs--使用/教程/实例_javascript_02

点击按钮:获取到父组件的同名属性

Vue--inheritAttrs--使用/教程/实例_官网_03


举报

相关推荐

0 条评论