當回傳到初始化頁面時,它不會運行 ngOnInit。例如/user/profile顯示用戶名,我繼續/user/settings更改用戶名,然后回到/user/profile. 用戶名 on/user/profile沒有改變,因為沒有呼叫 ngOnInit。
所以我想要的是重新初始化已經初始化的頁面。這是router.service.ts用于導航的:
export class RouterService {
constructor(
private router: Router,
) {
this.router.routeReuseStrategy.shouldReuseRoute = () => false;
this.router.onSameUrlNavigation = "reload";
};
async go(path: string[], options: NavigationExtras = {}) {
this.router.navigate(path, { ...options });
}
}
如果我添加replaceUrl: true到它作業的功能選項,初始化頁面重新初始化,但url 沒有被保存到瀏覽器歷史記錄并且瀏覽器后退按鈕不起作用(它重定向到應用程式的開頭)。
這是app.module.ts:
@NgModule({
declarations: [AppComponent],
imports: [
...
BrowserModule,
AppRoutingModule,
HttpClientModule,
],
providers: [
{ provide: RouteReuseStrategy, useClass: IonicRouteStrategy },
],
bootstrap: [AppComponent]
})
這是app-routing.module.ts:
@NgModule({
imports: [
RouterModule.forRoot(routes, { preloadingStrategy: PreloadAllModules, onSameUrlNavigation: "reload" }),
],
exports: [RouterModule]
})
export class AppRoutingModule { }
這些是路線:
const routes = [
{
path: "user/profile",
loadChildren: () => import("./user/profile/profile.module").then(m => m.ProfilePageModule),
canActivate: [LoggedGuard],
},
{
path: 'user/settings',
loadChildren: () => import('./user/settings/settings.module').then(m => m.SettingsPageModule),
canActivate: [LoggedGuard],
},
uj5u.com熱心網友回復:
生命周期鉤子不打算手動呼叫。也就是說,在您想要重新運行例程的主要組件中,您可以訂閱路由器事件并在路由與您希望給定頁面的任何值匹配時呼叫您希望的任何函式。
uj5u.com熱心網友回復:
使用 ionic 中的這種方法,您正在破壞頁面堆疊。您不需要重新初始化頁面,您可以簡單地使用離子生命周期鉤子而不是 Angular 的。ionViewWillEnter而不是ngOnInit,它在頁面打開時呼叫,而不是在啟動時呼叫。
uj5u.com熱心網友回復:
ngOnInit()
上述方法在創建頁面/組件時執行。可能在第一次在路由中添加頁面時執行。這是角度組件生命周期事件。
ionViewDidEnter()
該方法在我們每次進入頁面或組件時執行。這是離子頁面生命周期事件。所以使用ionViewDidEnter()
轉載請註明出處,本文鏈接:https://www.uj5u.com/gongcheng/527603.html
標籤:有角度的离子框架角路由器
