我有幾個路由,每個加載3個組件。兩個組件在所有路線上都是相同的。 當我在這些路線之間移動時,我想傳遞新的數據,並在組件的某個init事件上填充該組件的數據,以便在UI上反映出來。 另外我想要重新加載組件的引導程序動畫。 我會如何去做這件事。 因爲現在,我不知道組件生命週期中的哪個位置可以獲取數據並使用這些新數據重新渲染組件。 Concretly在myapps/1和/ newapp /我有一個主視圖組件和一個側邊欄組件。在/ newapp/URL中,我希望側欄上的所有圖標都是紅色的(主視圖上的任何圖標都沒有填充),並且主視圖應該是空的。 在myapps/1上,我想將服務器中的數據加載到主視圖中,如果全部填滿,我希望側欄上的圖標變爲綠色。 現在發生了什麼我加載myapps/1,單擊邊欄中的第二項,主視圖切換到第二個視圖。然後我router.push(「/ NEWAPP /)和側邊欄停留在第二項和第二主視圖 所以router.push。(」 /安裝MyApps /「);不重裝我的側邊欄和我的主視圖Vue路由器重新加載組件
。編輯:
這裏你可以看到我的路線,側欄和默認的是相同的
const routes = [
{
path: "/myapps/newproject",
components: {
default: ProjectMain,
"breadcrumbs": BreadcrumbsNewProject,
"sidebar": SidebarProject
}
},
{
path: "/myapps/:id",
components: {
default: ProjectMain,
"breadcrumbs": BreadcrumbsCurrentProject,
"sidebar": SidebarProject
}
},
{
path: "/myapps/newversion/:id",
components: {
default: ProjectMain,
"breadcrumbs": BreadcrumbsNewVersion,
"sidebar": SidebarProject
}
}
];
這是我ProjectMain.vue
<template>
<div class="wrapper wrapper-content">
<component :is="currentProjectMain"></component>
</div>
</template>
這是我的路由器視圖索引。 html:
<router-view name="sidebar"></router-view>
而且,我還有一個index.html中,默認的:
<router-view></router-view>
當我點擊側邊欄上的一些項目我發出事件到ProjectMain轉出的組件。所以像這樣: 在邊欄:
eventBus.$emit("currentProjectMainChanged", "appOverview");
在ProjectMain
或
eventBus.$emit("currentProjectMainChanged", "appSettings");
而且比:
eventBus.$on("currentProjectMainChanged", function(data){
if(data === "appOverview"){
self.currentProjectMain = CurrentProjectAppOverview;
}else if(data === "appSettings"){
self.currentProjectMain = CurrentProjectSettings;
}
});
如果我到 「/安裝MyApps /:ID」。它加載的側邊欄和ProjectMain,我得到了側邊欄的小動畫和ProjectMain這個自舉類: <div class="animated fadeInUp">
和兩個組件整個生命週期內得到。
默認appOverview在側邊欄被選擇並且CurentProjectAppOverview.vue加載爲在ProjectMain的成分。 比我單擊邊欄中的appSettings和類被添加到邊欄中的該項目以標記爲選中,並在ProjectMain CurrentProjectSettings.vue作爲組件加載。
但在麪包屑中,我有一個按鈕去「/ myapps/newversion /:id」 這是問題所在。當我點擊進入「/安裝MyApps/NEWVERSION /:ID」(router.push("/myapps/newversion/" + id);
)側邊欄上的第二個項目保持選中狀態(的appSettings)和ProjectMain CurrentProjectSettings.vue保持加載,和我沒有得到側邊欄的引導動畫和ProjectMain,並且組件不會經歷它們的生命週期。
當我點擊按鈕進入「/ myapps/newversion /:id」是我的引導動畫(<div class="animated fadeInUp">
)時,我想讓Sidebar和ProjectMain完成整個生命週期。我希望在側邊欄(如此appOverview)上選擇默認項目,並在ProjectMain中加載默認組件(如此CurentProjectAppOverview.vue)。
側邊欄中的每個項目都有彩色按鈕。如果我從「/ myapps /:id」去到「/ myapps/newversion /:id」,我想從服務器加載數據到CurrentProjectAppOverview.vue,如果所有數據都被填充了,我希望側邊欄上的按鈕是綠色,如果不是,它應該是紅色的。
所以簡而言之,當在這兩條路線之間移動時,我希望能夠加載數據並填充我想要的字段,並且我想要選擇並加載引導動畫和默認視圖,並且它們應該貫穿整個生命週期。現在路由器只是重用它們。
所以像「ReloadComponent:true」,或摧毀並重新創建組件。
我可以複製SidebarProject.vue和ProjectMain.vue並重命名它們,並在每個路由加載基本上一個副本,但這意味着我必須在不同的.vue文件中編寫相同的代碼。
之前有一個選項將YouComponent.route.canReuse設置爲false,這將做我想做的,但我認爲,但它在最新版本中被刪除。
請添加代碼。 – retrograde
我添加了代碼和更多解釋。 –