前言:有关Vue中父组件经过prop传值给子组件时,是否加v-bind的问题,没弄清楚时感受很乱,弄清楚以后很简单。vue
因为结果记起来很容易,因此先给出结果:只有传递字符串常量时,不采用v-bind形式,其他状况均采用v-bind形式传递。数组
传入的值title为一个常量(静态prop)时,不加v-bind(或者:)post
<blog-post title="My journey with Vue"></blog-post>
传入的值title为一个变量(动态prop)时,加v-bind(或者:)code
<blog-post v-bind:title="titleValue"></blog-post>
<!-- 不管静态的'42'仍是变量totalNumber(动态)的值为42,咱们都须要 `v-bind` 来告诉 Vue --> <blog-post v-bind:total="42"></blog-post> <blog-post v-bind:total="totalNumber"></blog-post>
<!-- 不管静态的'false'仍是变量booleanValue(动态)的值为false,咱们都须要 `v-bind` 来告诉 Vue --> <base-input v-bind:favorited="false"> <base-input v-bind:favorited="booleanValue">
<!-- 不管静态的'[234, 266, 273]'仍是变量commmetArray(动态)的值为[234, 266, 273],咱们都须要 `v-bind` 来告诉 Vue --> <blog-post v-bind:comment-ids="[234, 266, 273]"></blog-post> <blog-post v-bind:comment-ids="commmetArray"></blog-post>
<!-- 不管静态的"{name:'bob'}"仍是变量postObject(动态)的值为{name:'bob'},咱们都须要 `v-bind` 来告诉 Vue --> <blog-post v-bind:post="{name:'bob'}"></blog-post> <blog-post v-bind:post="postObject"></blog-post>
根据以上说明,能够看出只有当字符串以静态/常量形式传递时,才不须要也不能用v-bind传递。为何不能用v-bind传递呢?我以为主要是为了区分如下场景对象
<!-- 此时value为数值,计算1+value的值为25 --> <blog-post v-bind:value="24"></blog-post> <!-- 此时value为字符串,计算1+value的值为124 --> <blog-post value="24"></blog-post>
<!-- 此时value为布尔值 --> <blog-post v-bind:value="false"></blog-post> <!-- 此时value为字符串 --> <blog-post value="false"></blog-post>
对于数组和对象,道理也是同样。即不加v-bind时,vue就认为此时经过prop传递给组件的是字符串常量。blog