vue.js - Vue - 使用 eventBus 在动态组件之间传递数据?
问题描述
我的“搜索”(父)视图中有3 个组件;“SearchForm”、“ResultList”、“DetailPage”。当我收到来自后端的响应时,我从 SearchForm 切换到 ResultList。
<keep-alive>
<component v-bind:is="currentComponent"></component>
</keep-alive>
当在我的“SearchForm”中收到回复时,我将其保存到 searchBus;
searchBus.$emit('searchIssue', response.data);
然后,在我的 ResultList 中,我想再次检索它并显示结果;
mounted() {
searchBus.$on(['searchIssue'], (search) => {
this.table_items = search;
});
}
我显示加载动画(也是一个组件),直到响应完全加载并显示 ResultList。
由于Vue 生命周期,当所有组件都显示在一个视图中时,一切都在工作,因为它们在总线更新时已经在监听。
我应该选择不同的方法吗?例如,使用v-show
或将响应传递回父级并使用道具再次插入它(Idk,如果它可以工作,因为并非所有组件都具有相同的道具)。
有没有办法使用巴士呢?以及如何解决它使其成为一个线性层次结构并仍然隐藏不相关的组件?(SearchForm -> ResultList -> DetailPage)
解决方案
我应该选择不同的方法吗?
我是时候使用Vuex 了
每个 Vuex 应用程序的中心是 store。“存储”基本上是一个保存应用程序状态的容器。有两点使 Vuex 存储与普通的全局对象不同:
- Vuex 商店是被动的。当 Vue 组件从中检索状态时,如果 store 的状态发生变化,它们将响应式且高效地更新。
- 您不能直接改变商店的状态。改变商店状态的唯一方法是显式提交突变。这可以确保每个状态更改都留下可跟踪的记录,并启用有助于我们更好地理解我们的应用程序的工具。
推荐阅读
- python - Python 最佳实践:最好使用嵌套函数或私有函数语法?
- javascript - 循环json数据并显示在模态表中
- python - 即使我已经按下它,我的键也不起作用 Python Pygame
- r - ggplot核密度图线重叠不正确
- firebase-realtime-database - 如何从 Firebase 数据库密钥中检索/解码时间戳?
- azure-devops - Azure Devops 中的秘密管道参数
- python - 来自 django auth_user 的用户名作为另一个表中的外键
- python - 如何在列先例中的特定列中查找和查找值并将其值放入 Pandas 的新列中
- android - 我试图将一个应用程序部署到使用 kivy 开发的 google playstore。如何从 API 27 升级到 API 30
- javascript - Vanilla JavaScript 切换功能将我的 h2 标签向上移动