最新下载
热门教程
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
Vue2组件开发如何通过 props 选项向子组件传递静态与动态数据
时间:2026-08-13 13:15:49 编辑:袖梨 来源:一聚教程网
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
动态数据:必须加冒号,触发 JS 表达式求值
要传数字、布尔、对象、数组或变量时,必须用 :(即 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 声明方式影响类型安全与健壮性
仅用数组声明(如 props: ['title'])最简,但无法校验;推荐用对象形式明确约束。
- 指定类型:
title: String或count: Number,传错类型 Vue 会警告 - 设默认值:
size: { type: String, default: 'medium' },避免 undefined - 必填校验:
id: { 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