应用背景:为了更好的传递给后代组件一些属性名和属性值,但不希望所有的后代都继承这些属性名和属性值
inheritAttrs就是为了设置子组件是否继承这些属性名和属性值(style和class例外)
当inheritAttrs的值为true时,如下:
<body>
<div id="app">
<base-input required placeholder="Enter your username"></base-input>
</div>
<script>
Vue.component('base-input', {
inheritAttrs: true,
template: `
<label>
<input />
</label>
`
})
var app = new Vue({
el: '#app',
})
</script>
</body>
渲染出的子组件继承了父组件的属性:
当inheritAttrs的值为false时,如下:
<body>
<div id="app">
<base-input required placeholder="Enter your username"></base-input>
</div>
<script>
Vue.component('base-input', {
inheritAttrs: false,
template: `
<label>
<input />
</label>
`
})
var app = new Vue({
el: '#app',
})
</script>
</body>
渲染出的子组件没有继承父组件的属性:
$attrs则是属性的传递,可以根据需要给子组件或者后代组件传递祖先的属性名和属性值,用法如下:
<body>
<div id="app">
<base-input required placeholder="Enter your username"></base-input>
</div>
<script>
//input中绑定了$attrs
Vue.component('base-input', {
inheritAttrs: false,
template: `
<div>
<label>
<input
v-bind="$attrs"
/>
</label>
</div>
`
})
var app = new Vue({
el: '#app',
})
</script>
</body>
渲染结果为input表情继承了父组件的属性:
如此,便实现了父组件向后代组件传递信息的过程。