Prop传递数据

名称书写规范
  • HTML 特性是不区分大小写的。所以,camelCase (驼峰式命名) 的 Prop 需要转换为相对应的 kebab-case (短横线分隔式命名):
组件myHeader中配置:
props: ['myMessage']

调用时:

动态绑定prop
  • 使用v-bind动态的将Prop绑定到父组件的数据。每当父组件的数据变化时,该变化也会传导给子组件。
  • 如果你想把一个对象的所有属性作为 Prop 进行传递,可以使用不带任何参数的 v-bind (即用 v-bind 而不是 v-bind:prop-name)。例如,已知一个 todo 对象:
todo: {
  text: 'Learn Vue',
  isComplete: false
}
---------------------绑定------------------

--------------------等价于-----------------

单向数据流
  • 每次父组件更新时,子组件的所有 Prop 都会更新为最新值。这意味着你不应该在子组件内部改变 Prop。
  • 如果你想:
    • Prop 作为初始值传入后,子组件想把它当作局部数据来用;
    • Prop 作为原始数据传入,由子组件处理成其它数据输出;
  • 正确的应对方式
-----------1.定义一个局部变量,并用 prop 的值初始化它:
props: ['initialCounter'],
data: function () {                     //将initialCounter复制给当前组件的局部变量counter
  return { counter: this.initialCounter }
}

-----------2.定义一个计算属性,处理 prop 的值并返回:
props: ['size'],
computed: {                             
  normalizedSize: function () {          //将size处理最后返回normalizedSize
    return this.size.trim().toLowerCase()
  }
}
Prop验证
  • 给你期望的Prop规定类型、默认值、是否必须、验证函数...
  • type default required validator
props: {
    // 基础类型检测 (`null` 指允许任何类型)
    propA: Number,
    // 可能是多种类型
    propB: [String, Number],
    // 必传且是字符串
    propC: {
      type: String,
      required: true
    },
    // 数值且有默认值
    propD: {
      type: Number,
      default: 100
    },
    // 数组/对象的默认值应当由一个工厂函数返回
    propE: {
      type: Object,
      default: function () {
        return { message: 'hello' }
      }
    },
    // 自定义验证函数
    propF: {
      validator: function (value) {
        return value > 10
      }
    }
  }
!!! 数组/对象的默认值应当由一个工厂函数返回

你可能感兴趣的:(Prop传递数据)