$attrs号称捡漏王
当父组件给子组件传值,子组件并没有接收数据时,此时数据在$attrs中可以拿到,并且如果子组件不需要使用数据,而孙组件需要,则可以直接v-bind="$attrs"
传给孙。
示例:
<-- 父组件 -->
<div>
<myButton type="primary"/>
<div>
<-- 子组件 -->
<el-button v-band='$attrs'>主要按钮</el-button>
这样的写法就会直接将type="primary"
传递给孙组件中,子组件不需要使用props来接收,这样写的好处是无需再子组件中定义props,属性有时候也并不确定
同样孙组件中也可以采用props来接受父组件传递过来的参数
<template>
<button></button>
</template>
<script>
export default {
inheritAttrs: false,
props: [
"type",//注意props里的参数名称不能改变,必须和父组件传递过来的是一样的
],
mounted(){
console.log(this.$attrs) //可直接使用数据或者调用根组件的方法
}
};
</script>
inheritAttrs
inheritAttrs
的值为boolean
,默认为true,由于v-band='$attrs'
传递过来的值会作为dom元素上的属性存在,设置为false可以阻止这个行为,这些属性仍然可以通过$attrs来访问,class和style不会受到影响
-
inheritAttrs: true
-
inheritAttrs: false