Skip to content

如何将组件所有的props传递给子组件

$props:包含当前组件所有已声明的props属性

js
// 父组件往下传  v-bind="$props"
<A  :value="testValue"   v-bind="$props"></A>
// ...
  props: {
    parentProps1: {
      type: String,
      required: false,
      default: 'parentProps1'
    },
    parentProps2: {
      type: String,
      required: false,
      default: 'parentProps2'
    },
    parentProps3: {
      type: String,
      required: false,
      default: 'parentProps3'
    },
  }
// $props: {parentProps1:  "parentProps1", parentProps2: "parentProps2",parentProps3: "parentProps3"} 
// 使用Object.getOwnPropertyDescriptors($props),发现该对象的所有属性不可写的。writable: false

image

子组件中也必须使用props选项来接收

js
// 子组件 A
    props: {
        value: '',
        parentProps1: '',
        parentProps2: '',
        parentProps3: ''
    }
// $props: {value: "testValue", parentProps1:  "parentProps1", parentProps2: "parentProps2",parentProps3: "parentProps3"}

image

另类传递所有参数的思考

  • vue初始化state的顺序是:inject、props、methods、data、computer、watch、provide, 所以可以在provide中把$props传递给后代组件