props相当于一个组建的输入,和JS中function(a,b){}中的a和b很像,是一种参数

如图展示

      const foo={props:['title'],template:'<div>局部组件{{title}}</div>',};const a=new Vue({el:'#app',components:{foo},template:'<div><foo title="this si props"></foo></div>'})

一、props类型

1)字符串数组形式列出的 prop:,写法如下

props: ['title', 'likes', 'isPublished', 'commentIds', 'author']

2)还可以使用对象的形式指定每一个prop的类型,在它们遇到错误的类型时从浏览器的 JavaScript 控制台提示用户,写法如下

props: {title: String,likes: Number,isPublished: Boolean,commentIds: Array,author: Object,callback: Function,contactsPromise: Promise // or any other constructor
}

还可以这么写

props:{'title':{type:string}}

正确例子如下:

     const foo={props:{'title':{type:Number}},template:'<div>局部组件{{title}}</div>',};const a=new Vue({el:'#app',components:{foo},template:'<div><foo v-bind:title="2"></foo></div>'})

错误例子如下:

     const foo={props:{'title':{type:Number}},template:'<div>局部组件{{title}}</div>',};const a=new Vue({el:'#app',components:{foo},template:'<div><foo title="this si props"></foo></div>'})

 注意  当传的值是数字的时候需要使用v-bind写法或者简写:字段名,否则会给编译为字符串

二、prop“传入”的类型:

1)传入的数据可以是动态的也可以是静态的

prop 可以通过 v-bind 动态赋值,例如:

<!-- 动态赋予一个变量的值 -->
<blog-post v-bind:title="post.title"></blog-post><!-- 动态赋予一个复杂表达式的值 -->
<blog-postv-bind:title="post.title + ' by ' + post.author.name"
></blog-post>

2)传入一个数字

使用v-bind告诉vue 42是数字不是字符串

<!-- 即便 `42` 是静态的,我们仍然需要 `v-bind` 来告诉 Vue -->
<!-- 这是一个 JavaScript 表达式而不是一个字符串。-->
<blog-post v-bind:likes="42"></blog-post><!-- 用一个变量进行动态赋值。-->
<blog-post v-bind:likes="post.likes"></blog-post>

3)传入一个布尔值

prop没有值,意味着true

<!-- 包含该 prop 没有值的情况在内,都意味着 `true`。-->
<blog-post is-published></blog-post><!-- 即便 `false` 是静态的,我们仍然需要 `v-bind` 来告诉 Vue -->
<!-- 这是一个 JavaScript 表达式而不是一个字符串。-->
<blog-post v-bind:is-published="false"></blog-post><!-- 用一个变量进行动态赋值。-->
<blog-post v-bind:is-published="post.isPublished"></blog-post>

4)传入一个数组

<!-- 即便数组是静态的,我们仍然需要 `v-bind` 来告诉 Vue -->
<!-- 这是一个 JavaScript 表达式而不是一个字符串。-->
<blog-post v-bind:comment-ids="[234, 266, 273]"></blog-post><!-- 用一个变量进行动态赋值。-->
<blog-post v-bind:comment-ids="post.commentIds"></blog-post>

5)传入一个对象

<!-- 即便对象是静态的,我们仍然需要 `v-bind` 来告诉 Vue -->
<!-- 这是一个 JavaScript 表达式而不是一个字符串。-->
<blog-postv-bind:author="{name: 'Veronica',company: 'Veridian Dynamics'}"
></blog-post><!-- 用一个变量进行动态赋值。-->
<blog-post v-bind:author="post.author"></blog-post>

6)传入一个对象所有property

如果你想要将一个对象的所有 property 都作为 prop 传入,你可以使用不带参数的 v-bind (取代 v-bind:prop-name)。例如,对于一个给定的对象 post

post: {id: 1,title: 'My Journey with Vue'
}

下面的模板:

<blog-post v-bind="post"></blog-post>

等价于:

<blog-postv-bind:id="post.id"v-bind:title="post.title"
></blog-post>

三、props的默认值写法

利用default的写上默认值,当没有给prop传参就是执行展示默认值

1)带有默认值的数字

 const foo={props:{'title':{type:Number,default:0,}},template:'<div>局部组件{{title}}</div>',};const a=new Vue({el:'#app',components:{foo},template:'<div><foo ></foo></div>'})

2) 带有默认值的对象

      const foo={props:{'title':{type:Object,default: function () {return { message: 'hello' }},}},template:'<div>局部组件{{title.message}}</div>',};const a=new Vue({el:'#app',components:{foo},template:'<div><foo ></foo></div>'})

四、自定义函数验证传参

利用validator自定义验证函数当return true时说明传过来的参数通过验证当return false时就没有通过验证控制台会提示警告

写法如下

      const foo={props:{'title':{type:[String, Number,Object],default: function () {return { message: 'hello' }},validator:function(val){return val==='a';}}},template:'<div>局部组件{{title}}</div>',};const a=new Vue({el:'#app',components:{foo},template:'<div><foo title="a"></foo></div>'})

五、传值一定要写必填

利用required: true实现,如果不写控制台也会报错

     const foo={props:{'title':{type:[String, Number,Object],//传入的参数类型可以是字符串、数字以及对象required:true}},template:'<div>局部组件{{title}}</div>',};const a=new Vue({el:'#app',components:{foo},template:'<div><foo></foo></div>'})

六、prop都是单项数据流,是只读文件不可改写

父级 prop 的更新会向下流动到子组件中,但是反过来则不行。这样会防止从子组件意外变更父级组件的状态,从而导致你的应用的数据流向难以理解。

只读的写法:

     const foo={props:{'title':{type:[String, Number,Object],required:true}},template:'<div>局部组件{{title}}<button @click="read()">读取</button></div>',methods:{read(){console.log(this.title)}}};const a=new Vue({el:'#app',components:{foo},template:'<div><foo title="this is prop"></foo></div>',})

Vue Props是什么相关推荐

  1. vue——props的两种常用方法

    vue--props的两种常用方法 1.实现父-->子的通信 举例如下: 父组件 parent.vue <children :channel="object1"> ...

  2. vue实现php传数据,vue+props传递数据怎样实现

    这次给大家带来vue+props传递数据怎样实现,vue+props传递数据的注意事项有哪些,下面就是实战案例,一起来看一下. 在 Vue 中,父子组件的关系可以总结为 props向下传递,事件向上传 ...

  3. vue props type设置多个类型,默认值

    vue props type设置多个类型 props: {value: {// vue props type设置多个类型type: Number | null,required: true},arti ...

  4. Vue——props默认值为工厂函数时[工厂函数:undefined]问题解决方案

    问题描述 methods: {sayHi(){alert('hi');} }, props: {keyword: {default: 'a'},say: {type: Function,default ...

  5. Vue——[Props with type Object/Array must use a factory function to return the default value.]解决方案

    问题描述 [Vue warn]: Invalid default value for prop "weekTable": Props with type Object/Array ...

  6. vue props 多类型_一个TypeScript简例,以及Vue支持TS的一些些事儿

    前言 我们知道在Vue里用options来声明一个组件,举一个简单的例子 const options = {props: {name: {type: String,},},data() {return ...

  7. vue props命名为啥使用kebab-case (短横线隔开式) 来命名

    vue官方文档: Prop 的大小写 (camelCase vs kebab-case) HTML 中的 attribute 名是大小写不敏感的,所以浏览器会把所有大写字符解释为小写字符.这意味着当你 ...

  8. Vue——props配置

    文章目录 需求 props配置 props配置简单接收--数组形式 props配置接收--对象形式 props配置接收--对象形式2 props配置分析 props的优先级 需求 一个展示学生信息的组 ...

  9. Vue props用法详解

    父子组件 比如我们需要创建两个组件 Test(父组件) 和 Cmpone(子组件),现在我们要实现从Test组件向Cmpone组件传递数据.父组件向子组件传递数据分为两种方式:动态和静态 静态prop ...

  10. Vue Props的用法

    1.Props的使用场景: props常用于父子组件的传值,什么是父子组件.子组件就是在一个组件里被引用的组件,父组件就是包含子组件的组件. 2.Props怎么用? (1)创建父子组件 首先定义一个组 ...

最新文章

  1. Cron表达式的详细用法
  2. 各种有return的情况下try-catch-finally的执行顺序
  3. IoC-spring 的灵魂(带你轻松理解IOC思想及bean对象的生成过程)
  4. 自己定义View学习之12/7(进度条之混合模式)
  5. Python Tricks(七)—— 使用 list 仿真先入先出的队列(FIFOQueue)
  6. Fortran 95 流程控制、循环
  7. 在哪里设置自动锁定计算机,教你电脑锁屏怎么设置,让电脑自动锁屏
  8. 百度网盘文件真实地址解析
  9. 基于C++的诊所医院管理系统
  10. 哈工大计算机考研854会改成408吗?哈工大854性价比如何?怎么复习?
  11. 9A530丨1ADSL丨10%,
  12. Prometheus 之 Alertmanager告警抑制与静默
  13. 从SpriteKit看我的游戏人生
  14. 你真的认为iPhone只是一部手机?苹果惊天秘密之 一
  15. 流氓软件卸载-MrWReSadse、Nexuser.exe、WRSvcmbdl.dll
  16. 肺结节圆形边界光滑_肺结节不是肺癌,千万别恐慌
  17. 简单实用的离线浏览器Web Copier
  18. JAVA蘑菇西餐,今天为大家推荐一道非常好吃的西餐,蘑菇鸡扒
  19. paip 解决spring No unique bean of type com mijie homi searc
  20. 智慧屏是什么 荣耀智慧屏有什么用

热门文章

  1. 工作八年的程序员,却拿着毕业三年的工资,再不开窍就真晚了...
  2. 华为公司官方指定的五种主流编程语言
  3. 区块链系统:点对点交易原理
  4. ArcGIS教程:什么是ArcGIS中的报表
  5. Bitbucket使用说明与SourceTree的使用
  6. APICloud平台常用技术点汇总详解
  7. cisco路由器的时间标记
  8. 第五章 彩色图像处理
  9. Javascript 设计模式之代理模式【讲师辅导】-曾亮-专题视频课程
  10. 甲骨文特征提取与分类思路学习