路由器视图中标头组件和组件之间的Vue组件通信



我的VUE应用程序遇到问题,我使用VUE路由器导航到我的组件

在我的头组件中,我使用路由器链接导航到主组件

问题是:在我的Header组件中,我想要一个checkBox(一个布尔变量(,它可以像v-if一样更改Home组件(在路由器视图中呈现(的内容,如果它可以检查Header 中的布尔变量

这是我的App.vue模板,我试图通过发射来解决问题,但Im Kinda在组件(路由器视图(中传递数据时被卡住了

<template>
<div class="content">
<HeaderComponent @eventCheckBox="handleCheckBox" />
<router-view />
<FooterComponent />
</div>

你们已经面临过这个问题吗,有没有一种方法可以用经典的方式来做,或者我应该尝试像Portal或Teleport这样的插件?

Portal和Teleport是相同的,只是名称不同(Vue3中的transport是官方名称(。

至于问题的其余部分,这很好地解释了这一点:https://stackoverflow.com/a/49702934/8816585

主要是,你需要看看是否需要使用像Pinia(推荐(和Vuex这样的商店。大多数情况下,您可以使用父子关系。下面是另一篇文章,解释你什么时候需要这样的东西:https://markus.oberlehner.net/blog/should-i-store-this-data-in-vuex/#alternatives-在vuex 中存储数据

在Vue3中,您甚至可以不使用存储,而只依赖于singleton模式+可组合(同样,有很多文章可用于该模式(。


TLDR:使用Vue开发工具并检查状态流
如果您需要更多,请使用更强大的工具。

谢谢Kissu博士,我会听从你的建议,了解Pinia(它看起来很可怕(,但对于我的问题,我设法做到了这一点:

我制作了另一个主组件"home-2",然后在我的头组件中,当我点击我的复选框时,它会调用一个函数,我在其中检查当前路由.fullPath,然后我用route.push((重定向用户

goHome(){
if (this.$route.fullPath ==='/home' || this.$route.fullPath ==='/' ){
this.$router.push('/home-2');
}
},

最新更新