Vue2中props传值需区分静态字符串与动态表达式:不加冒号传字符串字面量,加冒号(v-bind)才解析JS值;props推荐对象声明以校验类型、设默认值及必填项;模板中用短横线命名,JS中用驼峰。
Vue2 中通过 props 向子组件传值,关键在于区分“静态字符串”和“动态表达式”两种场景——不加冒号是传字符串字面量,加冒号(v-bind)才解析为 JS 值。
适合传递固定文本、标识符等纯字符串内容。Vue 不会做类型转换,所有值都以字符串形式进入子组件。
<my-button text="提交"></my-button>
props: ['text'],此时 this.text 是字符串 "提交"
count="5",子组件收到的是字符串 "5",不是数字 5要传数字、布尔、对象、数组或变量时,必须用 :(即 v-bind),否则一律转成字符串。
<my-input :max="100"></my-input> → this.max 是数字 100
<my-dialog :visible="isDialogOpen"></my-dialog> → this.visible 是 true/false<user-list :users="userList"></user-list> → 直接传响应式数据引用仅用数组声明(如 props: ['title'])最简,但无法校验;推荐用对象形式明确约束。
title: String 或 count: Number,传错类型 Vue 会警告size: { type: String, default: 'medium' },避免 undefinedid: { type: [String, Number], required: true }
props 在 JS 中用驼峰(userName),但在模板中必须写短横线(user-name)。
props: ['userName']
<user-card user-name="张三"></user-card>(静态)或 <user-card :user-name="name"></user-card>(动态)user-name="张三" 且未声明 userName,或声明了 userName 却在模板写 username