prop的大小写

HTML 中的 attribute 名是大小写不敏感的,所以浏览器会把所有大写字符解释为小写字符。这意味着当你使用 DOM 中的模板时,camelCase(驼峰命名法)的 prop 名需要使用其等价的 kebab-case(短横线分隔命名)。如果使用字符串模板,这个限制就不存在了。

prop类型

我们常见的 prop 是以字符串数组形式列出的 prop

props: ['title', 'likes', 'isActived']

但是,通常你也希望每个 prop 都有指定的值类型,这个时候,可以使用 对象形式 列出 prop,这些 property 的名称和值分别是 prop 各自的名称和类型。

props: {title: String,likes: Number,isActived: Boolean
}

单向数据流

所有 prop 都使得其父子 prop 之间形成了一个单向下行绑定:父级 prop 的更新会向下流动到子组件中,但是反过来不行。这样会防止子组件意外变更父组件的状态,从而导致你的应用的数据流向难以理解。
每次父级组件发生变更时,子组件中所有的 prop 都将会刷新为最新的值。如果你在一个子组件内部改变 prop,Vue 会在浏览器的控制台中发出警告
点击按钮子组件会修改父组件传递过来的 prop,浏览器会报错
父组件

<template><div>father<son-comp :fatherMsg="fatherMsg"></son-comp></div>
</template><script>
import sonComp from './sonComponent'
export default {name: 'fatherComponent',data() {return {fatherMsg: 'fatherMe'}},components: {sonComp}
}
</script>

子组件

<template><div>son{{ fatherMsg }}<button @click="change">改变</button></div>
</template><script>
export default {name: 'sonComponent',props: ['fatherMsg'],methods: {change() {this.fatherMsg = 'haha'}}
}
</script>

以上这种改变子组件中的prop 是不可取的

两种常见的试图变更一个 prop 的情形
1. 这个 prop 用来传递一个初始值,这个子组件接下来希望将其作为一个本地的 prop 数组来使用
在这种情况下,最好定义一个本地的 data property 并将这个 prop 用作其初始值

  props: ['fatherMsg'],data() {return {sonMsg: this.fatherMsg}},

2. 这个 prop 以一种原始的值传入且需要进行转换
在这种情况下,最好使用这个 prop 的值来定义一个计算属性

  props: ['fatherMsg'],computed: {sonData() {return this.fatherMsg.toUpperCase()}}

prop 验证

我们可以为组件的 prop 指定验证要求,例如你知道的这些类型,如果有一个需求没有被满足,则 Vue 会在浏览器控制台中警告你。
为了定制 prop 的验证方式,你可以为 prop 中的值提供一个带有验证需求的对象,而不是一个字符串数组。

props: {// 基础的类型检查(null 和 undefined 会通过任何类型验证)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 ['success', 'warning', 'danger'].indexOf(value) !== -1}}
}

子组件会对父组件传递过来的值进行类型校验,当 prop 验证失败的时候,开发环境构建版本的 Vue 将会产生一个控制台的警告

注意那些 prop 会在一个组件实例创建之前进行验证,所以实例的 property (如data、computed
等)在 defaultvalidator 函数中是不可用的

类型检查

type 可以是下列原生构造函数中的一个

  • String
  • Number
  • Boolean
  • Array
  • Object
  • Date
  • Function
  • Symbol

替换/合并已有的 Attribute

想象一下 <bootstrap-date-input> 的模板是这样的

<input type="date" class="form-control">

为了给我们的日期选择器插件定制一个主题,我们可能需要向这样添加一个特别的类名

<bootstrap-date-inputdata-date-picker="activated"class="date-picker-theme-dark"></bootstrap-date-input>

以上这种情况,我们定义了两个不同的 class 的值:

  • form-control :这是在组件的模板内设置好的
  • date-picker-theme-dark:这是从组件的父级传入的
    结论:
    对于绝大多数 attribute 来说,从外部提供给组件的值会替换掉组件内部设置好的值。所以如果传入 type="text" 就会替换掉 type="date" 并把它破坏。
    然而,classstyle attribute 会稍微智能一些,即两边的值会被合并起来,从而得到最终的值: form-control date-picker-theme-dark
    如下示例:
    dataInput.vue
  <input type="date" class="form-control">

fatherAttribute.vue

<template><div>fatherAttribute<data-input class="date-picker-theme-dark"></data-input></div>
</template><script>
import dataInput from './dataInput'
export default {name: 'fatherAttribute',components: {dataInput}
}

结果

如果给 fatherAttribute.vue 的组件中添加 type="text"

  <div>fatherAttribute<data-input type="text" class="date-picker-theme-dark"></data-input></div>

结果

vue中prop的用法相关推荐

  1. vue中directives的用法

    Vue中directives的用法 关于 vue 中 directives 的用法问题,详细可以参考vue官方对directives的解释 当前文章主要讲述directives怎么用,directiv ...

  2. vue中定时器一般用法,定时器函数传参以及清除定时器

    一.vue中定时器一般用法(举个例子) 显示当前时间, setInterval()方法会每秒执行一次函数,类似手表功能: <template><div class="use ...

  3. vue中this.init用法_Vue中的this.$options.data()和this.$data用法说明

    问题 项目里遇到一个问题,用this.$options.data()重置组件data时,data()里用this获取的props或method都为undefined,代码简化如下: export de ...

  4. vue中watch的用法

    在vue中,使用watch来响应数据的变化.watch的用法大致有三种.下面代码是watch的一种简单的用法: <input type="text" v-model=&quo ...

  5. vue中prop传值

    props配置项 功能:让组件接收外部传过来的数据 传递数据:<Demo name="xxx"/> 接收数据: 第一种方式(只接收):props:['name'] 第二 ...

  6. vue中props的用法

    vue使用props的用法 日常编程中都会用到父组件用子组件.子用父的情况,下面先介绍一种子传父的情况 1.在父组件中 (1).首先是在其定义一个list属性以存储其数据值 (2).定义一个绑定属性& ...

  7. vue中@oninput的用法

    .vue文件其实是一个组件,今天这篇文章要讲的是.vue文件中监听input的输入值变化事件.需求是这页面中,改变input的值,就调用一个事件,第一想到的是oninput. oninput 事件在用 ...

  8. vue中$root的用法

    vue中$root是用来访问根组件的,用法: this.$root.根组件属性 代码: main.js: new Vue({data(){return{isUpdate:true //根组件属性}}, ...

  9. vue 中provide的用法_聊聊Vue中provide/inject的应用详解

    众所周知,在组件式开发中,最大的痛点就在于组件之间的通信.在 Vue 中,Vue 提供了各种各样的组件通信方式,从基础的 props/$emit 到用于兄弟组件通信的 EventBus,再到用于全局数 ...

最新文章

  1. 在java中实现滚动文字,通过线程实现文字在屏幕上不停滚动,为什么文字不显示啊,求指点...
  2. oracle惯用缩写的含义
  3. HTML超文本描述语言,HTML超文本标记语言的介绍
  4. java获取返回xml节点里的值,关于用java读取xml中节点的值解决方案
  5. php解escape,PHP下escape解码函数用法示例
  6. 手把手教你编写Logstash插件
  7. windows安装HTK3.4.1
  8. MCU加密技术分析(二)
  9. android 自定义园动画,如何在Android中绘制一个带有动画的圆
  10. 【雷达通信】基于matlab线性调频(LFM)脉冲压缩雷达仿真【含Matlab源码 283期】
  11. java框架的作用_java三大框架的作用介绍
  12. axure能做剪切蒙版吗_***自动售货机能做吗
  13. springboot+redis主从复制、哨兵、读写分离
  14. matlab用我爱你绘制立体桃心,用MATLAB画心形图案
  15. 让你立刻爱上数学的10个算术游戏
  16. 工作太闲闹心怎么办啊
  17. bezier曲面制作,SU技巧 | Bezier Surface(贝兹曲面)
  18. Java:Java还很重要吗?
  19. 学学这五招,打造自媒体短视频
  20. c语言交通违章编程代码,C语言程序设计之交通处罚单管理系统报告(内含代码)...

热门文章

  1. 《德鲁克管理思想精要》读书笔记2 - 企业的宗旨、目标
  2. 【2019年03月29日】股票的滚动市盈率PE最低排名
  3. composer设置国内源
  4. Scheduled里面报错No thread-bound request found
  5. Pytorch+LSTM+Encoder+Decoder实现Seq2Seq模型
  6. idea 修改项目名称的方法
  7. 中国移动 烽火HG6543C5光猫 获取超级密码教程
  8. 周易六十四卦——风雷益卦
  9. uview Cell 单元格 右侧箭头偏小
  10. 安装mysql报msvcr100_解决安装mysql 提示msvcr100.dill 丢失,的最快方法