vue DataView传参
DataView传参
在 Vue 中,父组件向子组件传递参数主要通过 Props 实现。以下是详细步骤和示例:
1. 子组件声明 Props
在子组件中,使用 props 选项定义需要接收的参数(支持类型验证和默认值):
vue
<!-- 子组件 DataView.vue -->
<template>
<div>
<h2>{{ title }}</h2>
<p>{{ content }}</p>
<p>用户ID: {{ userId }}</p>
</div>
</template>
<script>
export default {
// 声明 Props(推荐对象形式进行类型校验)
props: {
title: {
type: String,
required: true // 必传参数
},
content: {
type: String,
default: "默认内容" // 默认值
},
userId: {
type: Number,
required: true
}
}
}
</script>
2. 父组件传递 Props
在父组件中,通过 v-bind(或简写 :)动态传递数据:
vue
<!-- 父组件 ParentPage.vue -->
<template>
<div>
<!-- 静态传值 -->
<DataView title="静态标题" :userId="1001" />
<!-- 动态绑定父组件数据 -->
<DataView
:title="dynamicTitle"
:content="pageContent"
:userId="currentUser.id"
/>
</div>
</template>
<script>
import DataView from './DataView.vue'
export default {
components: { DataView },
data() {
return {
dynamicTitle: "动态标题",
pageContent: "这是父组件传来的内容",
currentUser: { id: 2001 }
}
}
}
</script>
关键细节说明:
-
Prop 命名规范:
- 子组件中使用 camelCase(如
userId) - 父组件传递时推荐 kebab-case(如
user-id),但 Vue 会自动转换,因此直接写:userId也可。
- 子组件中使用 camelCase(如
-
动态 vs 静态:
html
<!-- 静态(字符串) --> <Child title="文本值"/> <!-- 动态(绑定变量) --> <Child :title="dynamicValue"/> -
传递复杂数据:
vue
<!-- 传递对象 --> <DataView :config="{ size: 'large', theme: 'dark' }" /> <!-- 子组件中直接使用 config.size --> props: ['config'] -
单向数据流:
-
Props 是只读的!子组件不可直接修改(控制台警告)。
-
需要修改时,在子组件中用
data或computed中转:js
data() { return { localTitle: this.title // 复制 prop 到本地数据 } }
-
特殊情况:非 Prop 的 Attribute
如果父组件传递了未在子组件 props 中声明的属性(如 class、style 或自定义属性),默认会自动绑定到子组件的根元素上。可通过 inheritAttrs: false 关闭,然后手动通过 $attrs 绑定到指定元素:
vue
<!-- 子组件 -->
<div>
<p v-bind="$attrs">接收额外属性</p>
</div>
<script>
export default {
inheritAttrs: false // 阻止自动绑定到根元素
}
</script>
完整流程图:
text
父组件
│
├── 定义数据 (data)
│
└── 通过 v-bind 传递 Prop
│
▼
子组件
│
└── 通过 props 接收数据
通过以上步骤,即可在 Vue 中实现父组件向子组件的高效参数传递。
浙公网安备 33010602011771号