Vue Prop属性功能与用法实例详解

2020-06-13 10:36:49易采站长站整理

3.2 传入一个布尔值


<!-- 传入布尔值-->
<!-- 如果 prop 没有该值,则表示 true-->
<blog-post is-published></blog-post>
<!-- 静态-->
<!-- 这里的 false 实际是 JS 表达式-->
<blog-post v-bind:is-published="false"></blog-post>
<!-- 动态-->
<blog-post v-bind:is-published="post.isPublished"></blog-post>

3.3 传入一个数组


<!-- 静态 -->
<blog-post v-bind:comment-ids="[1,2,3]"></blog-post>
<!-- 动态-->
<blog-post v-bind:comment-ids="post.commentIds"></blog-post>

3.4 传入一个对象


<!-- 静态 -->
<blog-post v-bind:author="{name:'Deniro',company:'DreamWork'}"></blog-post>
<!-- 动态-->
<blog-post v-bind:author="post.author"></blog-post>

3.5 传入一个对象的所有属性

如果你想要将一个对象的所有属性都作为 prop 传入,你可以使用不带参数的

v-bind
(取代
v-bind:prop-name
)。例如,对于一个给定的对象 post:


post: {
id: 1,
title: 'xx 新闻'
}

下面的模板:


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

等价于:


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

4 单向数据流

所有的 prop 都使得其父子 prop 之间形成了一个单向下行绑定:父级 prop 的更新会向下流动到子组件中,但是反过来则不行。这样会防止从子组件意外改变父级组件的状态,从而导致你的应用的数据流向难以理解。

额外的,每次父级组件发生更新时,子组件中所有的 prop 都将会刷新为最新的值。这意味着你不应该在一个子组件内部改变 prop。如果你这样做了,Vue 会在浏览器的控制台中发出警告。

这里有两种常见的试图改变一个 prop 的情形:

1、这个 prop 用来传递一个初始值;这个子组件接下来希望将其作为一个本地的 prop 数据来使用。在这种情况下,最好定义一个本地的 data 属性并将这个 prop 用作其初始值:


props: ['initialCounter'],
data: function () {
return {
counter: this.initialCounter
}
}

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