考慮下面的路由配置:如何刷新路由的解決數據
const routes: Routes = [
{
path: '',
component: AppComponent,
resolve: {
app: AppResolver
},
children: [
{
path: 'user/:uid',
resolve: {
user: UserResolver
},
children: [
{
path: '',
component: ViewUserComponent
},
{
path: 'edit',
component: EditUserComponent
}
]
}
]
}
];
數據由UserResolver
路線/user/:uid
的任何子女檢索的用戶。 使用此數據,用戶配置文件可通過導航至/user/:uid
進行查看,然後通過導航至/user/:uid/edit
進行編輯。 編輯成功後,將會有人重定向到用戶的已更新的配置文件(/user/:uid
)。
但是,視圖和編輯頁面都是已解析路徑的子項,解析器在從一個導航到另一個導航時不會被觸發。
因此,從編輯組件導航回視圖組件時,顯示的數據仍然是舊的,未更新的。
會有什麼辦法來解決已解決的user
數據強制解析器從服務器再次獲取它嗎?或者有沒有其他方法可以實現這種結果?
app
數據保持不變,我們不應該重新加載它。
使用共享服務而不是父組件來處理數據。 –
@HarryNinh我可以,但這意味着複製訂閱路由參數的代碼並在每個子組件中調用服務,同時在共享服務中重新實現緩存策略。這似乎破壞了路由解析器的目的。 – vlaurin
很多關於這個問題的搜索。盡我所能地告訴解決這個問題的唯一方法是訂閱一個事件並手動重新加載數據。理想情況下,你會構建應用程序。所以你可以通過代碼重用來做到這一點,但即使這也是一個挑戰,因爲重新使用Resolve並不是微不足道的,因爲獲得路由器狀態。我選擇在Resolve中創建一個公用函數,可以重用並繞過解析函數本身。這是一個可以改進的明確領域。我看到很多人有這樣的問題。 –