Prop传递数据

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

调用时:
<my-header my-message='hello!'></my-header>
动态绑定prop
  • 使用v-bind动态的将Prop绑定到父组件的数据。每当父组件的数据变化时,该变化也会传导给子组件。
  • 如果你想把一个对象的所有属性作为 Prop 进行传递,可以使用不带任何参数的 v-bind (即用 v-bind 而不是 v-bind:prop-name)。例如,已知一个 todo 对象:
todo: {
  text: 'Learn Vue',
  isComplete: false
}
---------------------绑定------------------
<todo-item v-bind="todo"></todo-item>
--------------------等价于-----------------
<todo-item
  v-bind:text="todo.text"
  v-bind:is-complete="todo.isComplete"
></todo-item>
单向数据流
  • 每次父组件更新时,子组件的所有 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
      }
    }
  }
!!! 数组/对象的默认值应当由一个工厂函数返回
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • 这篇笔记主要包含 Vue 2 不同于 Vue 1 或者特有的内容,还有我对于 Vue 1.0 印象不深的内容。关于...
    云之外阅读 5,082评论 0 29
  • Spring Cloud为开发人员提供了快速构建分布式系统中一些常见模式的工具(例如配置管理,服务发现,断路器,智...
    卡卡罗2017阅读 134,993评论 19 139
  • Vue 实例 属性和方法 每个 Vue 实例都会代理其 data 对象里所有的属性:var data = { a:...
    云之外阅读 2,246评论 0 6
  • 1.安装 可以简单地在页面引入Vue.js作为独立版本,Vue即被注册为全局变量,可以在页面使用了。 如果希望搭建...
    Awey阅读 11,108评论 4 129
  • 下载安装搭建环境 可以选npm安装,或者简单下载一个开发版的vue.js文件 浏览器打开加载有vue的文档时,控制...
    冥冥2017阅读 6,097评论 0 42