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. java 数组遍历_Java中遍历数组使用foreach循环还是for循环?
  2. 使用 docker 构建分布式调用链跟踪框架skywalking
  3. [html] 如何使用html5进行图片压缩上传?
  4. 三个用户在同一系统中同时对他们的c语言,杭州电子科技大学学生考试卷2013年操作系统试卷(2份,有答案)...
  5. 倒计时的js实现 倒计时 js Jquery
  6. 计算机无法识别佳能70d相机,佳能相机常见的错误代码和解决方案-万兴恢复专家...
  7. 车牌识别、证件识别、汽车VIN识别在汽车服务门店中的实际应用
  8. python登陆126邮箱记录
  9. 华为服务器上安装vm系统,云服务器安装vm教程
  10. Linux系统下7个好用的PDF编辑器推荐
  11. 【GameMaker】加速Runtime下载
  12. salvage 数据块打捞工具
  13. 翻译谷歌浏览器F12的功能
  14. 苹果cms模板_苹果cms10好看的模板有那些?
  15. iOS10 UICollectionView不调用cellForItemAtIndexPath
  16. c语言编程星空代码,写给初学者──如何学习C语言
  17. java/c++中内部类、匿名类
  18. 用winhex进行GPT磁盘多分区恢复实例——超详细
  19. 思科配置默认路由和静态路由
  20. bitbucket.org 是一个非常奇怪的网站

热门文章

  1. Oracle项目管理系统之风险定性分析
  2. Vertu模仿秀遭热捧 折射黑手机泛滥主因
  3. Ubuntu18.04安装详细教程
  4. IDEA推送项目到gitee上,拉取gitee项目到IDEA中
  5. 世界顶级思维(必须收藏)
  6. 可视化神器Plotly玩转多子图绘制
  7. SSD配置和训练以及遇到的坑
  8. APIcloud的基本使用
  9. 安装python教程
  10. JAVA操作execl