作用

  • 简化父子组件传值

    props 与 attrs 的区别

  • props 要先声明才能取值,attrs 不用先声明

  • props 声明过的属性,attrs 里不会再出现
  • props 不包含事件,attrs 包含事件
  • props 支持 string 以外的类型,attrs 只有 string 类型

    API

  • 默认所有属性都绑定到根元素

  • inheritAttrs: false 可以取消默认绑定
  • $attrs | context.attrs 获取所有属性
  • v-bind="$attrs" 绑定所有属性
  • const {size, level, ...xxx(剩余所有)} = context.attrs 解构赋值

    示例

  • 父组件

    1. <div>
    2. <Childern @click="x" @change="y" :value="z">
    3. </div>
  • 子组件

    1. <template>
    2. <div :value="value"> //默认所有属性绑定到子组件的根元素上,使用 inheritAttrs:false 取消绑定
    3. <button v-bind="xxx"> | <button v-bind="$attrs">//绑定所有属性
    4. <slot/>
    5. </button>
    6. </div>
    7. </template>
    8. <script lang="ts">
    9. export default {
    10. inheritAttrs:false,
    11. setup(props,context){
    12. const {value,...xxx} = context.attrs
    13. return {value,xxx}
    14. }
    15. }
    16. </script>