Vue组件间传值方法总结与实例
需积分: 36 134 浏览量
更新于2024-09-07
收藏 748B MD 举报
在 Vue.js 开发中,组件间的传值是一个常见的需求,尤其是在前后端分离的单页应用中。本文将重点介绍 Vue 中几种最常见的组件间传值方法,特别是针对你提供的示例,主要涉及父子组件之间的数据传递以及通过路由查询参数进行传递。
### 父子组件传值
在 Vue 中,父子组件之间的数据传递通常有两种方式:props 和 `$emit`。在你给出的示例中,`<el-button>` 是一个子组件,它触发了一个自定义事件 `@click`,这个事件绑定了父组件的 `userInfo` 方法。当用户点击按钮时,会将 `id` 参数通过 `this.$emit` 传递给父组件:
```javascript
// 子组件(a.vue)
<template>
<el-button @click="userInfo('oddUserInfo', scope.row.id)">账号详情</el-button>
</template>
<script>
export default {
methods: {
userInfo(name, id) {
this.$emit('update:selectedUser', { name, id });
}
}
}
</script>
```
在父组件(b.vue)中,监听子组件的 `selectedUser` 事件,并接收传过来的数据:
```javascript
<template>
<div>
<child-component :selectedUser="selectedUser"></child-component>
</div>
</template>
<script>
import ChildComponent from './ChildComponent.vue';
export default {
components: {
ChildComponent
},
data() {
return {
selectedUser: {}
};
},
methods: {
// 接收并处理子组件传递过来的数据
handleSelectedUser(userData) {
this.selectedUser = userData;
this.getData();
}
}
};
</script>
```
这种方法确保了数据单向流动,避免了不必要的混乱。
### 路由传值
当你提到的 `this.$router.push` 中的 `query` 对象,Vue Router 提供了一种便捷的方式来在组件之间传递参数。当从一个组件跳转到另一个组件时,可以将数据作为查询字符串添加到 URL 中,然后在目标组件的 `created` 生命周期钩子里通过 `this.$route.query` 获取这些参数。例如:
```javascript
// 在子组件(点击按钮)
this.$router.push({
name: 'targetComponent',
query: {
userDetailsId: id
}
});
// 在目标组件(b.vue)
created() {
if (this.$route.query.userDetailsId) {
this.userId = this.$route.query.userDetailsId;
this.getData();
}
}
```
这种方式适合于在组件间传递临时或非关键信息,因为它们会被附加到 URL 并显示在浏览器地址栏中,不适合敏感数据。
总结,Vue 的组件间传值有父子组件的 props 和 $emit、以及通过路由的 query 参数传递。理解并熟练运用这些机制,可以让你更好地构建模块化的组件结构,保持应用程序的组织和可维护性。记住,Vue 的设计原则之一就是“组件化”,这包括了数据的正确传递,使得代码更清晰、更易于扩展。
2020-12-12 上传
2020-10-17 上传
2023-08-16 上传
2023-05-30 上传
2023-12-05 上传
2024-10-11 上传
2023-08-18 上传
2024-10-31 上传
мо仙堡杠把子灬
- 粉丝: 1433
- 资源: 7
最新资源
- myilportfolio
- GH1.25连接器封装PCB文件3D封装AD库
- Network-Canvas-Web:网络画布的主要网站
- 基于机器学习和LDA主题模型的缺陷报告分派方法的Python实现。原论文为:Accurate developer r.zip
- ReactBlogProject:Blog项目,测试模块,React函数和后端集成
- prefuse-caffe-layout-visualization:杂项 BVLC Caffe .prototxt 实用程序
- thresholding_operator:每个单元基于阈值的标志值
- 基于深度学习的计算机视觉(python+tensorflow))文件学习.zip
- app-sistemaweb:sistema web de citas medicasRuby在轨道上
- 记录书籍学习的笔记,顺便分享一些学习的项目笔记。包括了Python和SAS内容,也包括了Tableau、SPSS数据.zip
- bpm-validator:Bizagi BPM 验证器
- DocBook ToolKit-开源
- file_renamer:通过文本编辑器轻松重命名文件和文件夹
- log4j-to-slf4j-2.10.0-API文档-中文版.zip
- django-advanced-forms:Django高级脆皮形式用法示例
- android-sispur