梗概:
适用范围
- 快速做属性传递中转
- 无需像props一样,繁琐的定义接受再传递
示例
父组件的代码:
<template>
<div>
<child-dom :foo="foo" :bar="bar"></child-dom>
</div>
</template>
<script>
import ChildDom from "../components/attrs/ChildDom.vue";
export default {
components: {
ChildDom,
},
data() {
return {
foo: "foo",
bar: "bar",
};
},
};
</script>子组件的代码:
<template>
<div>
<p>foo:{{ foo }}</p>
</div>
</template>
<script>
export default {
props: ["foo"],
};
</script>在2.4中新增选项inheritAttrs,inheritAttrs的默认值为true, 将inheritAttrs的值设为false, 这些默认的行为会禁止掉。但是通过实例属性 $attrs ,可以将这些特性生效,且可以通过v-bind 绑定到子组件的非根元素上。
将子组件的代码修改一下:
<template>
<div>
<p>foo:{{ foo }}</p>
<p>attrs: {{ $attrs }}</p>
<dom-child v-bind="$attrs"></dom-child>
</div>
</template>
<script>
import DomChild from "./DomChild.vue";
export default {
props: ["foo"],
inheritAttrs: false,
components: {
DomChild,
},
};
</script>然后在加一个孙组件
<template>
<div>
<p>bar:{{ bar }}</p>
</div>
</template>
<script>
export default {
props: ["bar"],
};
</script>页面显示如下:
