javascript - 如何在未嵌套的组件之间传递数据?
问题描述
我有一个vue
由 vue 组件组成的应用程序。基本页面是App.vue
这样的:
<template>
<div id="app">
<site-header></site-header> <!-- This is a vue component -->
<div>
<router-link :to="{ path: '/new'}">New Post</router-link>
<router-view></router-view> <!-- newpost.vue will be loaded here -->
</div>
<site-footer></site-footer> <!-- This is a vue component -->
</div>
</template>
当用户单击链接时,会加载一个视图,其中包含一个允许用户创建新帖子New Post
的单个文件。component
这component
被称为newpost.vue
。
该site-header
组件有一个div
区域需要在应用程序中显示可能来自任何其他错误的区域component
......因为site-header
所有页面上都存在:
网站头文件.vue
<template>
<header>
<div id="global-error">
<p> {{globalErrorMessage}} </p> <!-- Need to display error messages here -->
</div>
</header>
</template>
所以我的问题是:
- 为了开始
{{globalErrorMessage}}
工作,我是否需要prop
在siteheader.vue中为这些数据创建一个? - 如果我需要创建一个
prop
,如何将数据从任何<router-view>
加载的组件传递到siteheader.vue道具? - 以上似乎是不可能的,因为newpost.vue永远不会与siteheader.vue有父/子关系。它们是同一级别的兄弟姐妹,那么一个组件如何监听另一个组件的发出事件?
- 鉴于此,我是否
data(){ return {globalErrorMessage: "" } }
在siteheader.vue中创建,然后有一个computed
可以更改此数据的方法?如果是这样,newpost.vue如何访问 siteheader.vue 中的方法来更改错误消息的数据字段? - 最后,以上所有这些都是胡说八道
Vuex
吗?状态管理是要走的路吗?这似乎也不正确,因为每个错误对于该访问者都是唯一的。不必为错误维护状态。
我不知道如何解决这个问题,因此有上述问题。
解决方案
虽然Vuex
这是一个优雅的选择,尤其是在应用程序变得更复杂的情况下,您可以使用 anevent-bus
将消息从第一个组件发送到第二个组件:
事件总线.js:
import Vue from 'vue';
export const EventBus = new Vue();
新帖子.vue:
import { EventBus } from './event-bus.js';
...
EventBus.$emit('set-global-error-message', 'Something went wrong');
站点标题.vue:
import { EventBus } from './event-bus.js';
...
created() {
EventBus.$on("set-global-error-message", this.setGlobalErrorMessage);
},
methods: {
setGlobalErrorMessage(errorMessage) {
this.globalErrorMessage = errorMessage;
},
},
推荐阅读
- angular - Angular2 - 带有多个复选框的 NgFor
- python-3.x - color.cpp:11147: 错误: (-215) scn == 3 || 函数 cv::cvtColor 中的 scn == 4
- java - 在 PoolProperties 类中添加编码
- python - tf.data.Dataset.map() 的输出张量形状有些奇怪
- json - 如何使用 SQFLite 或 Moor 库将 JSON 数据存储到颤振中的数据库表中
- r - 从 R 连接到麒麟
- java - Java Mockito-如何模拟参数方法的不确定数量
- java - 使用 spring 集成测试 MultipartFile 上传
- java - 使用 When vs Verify 验证方法调用
- c# - 取消时间或手动取消的 CancellationToken。嵌套取消令牌