我有2个如下所示的链接。当我第一次单击任何一个时,它都会导航到它,但是之后我单击第二个链接时,URL会更改,但不会导航到它。
<li><a routerLink="/order/buyer" >Buyer</a></li>
<li><a routerLink="/order/seller">Seller</a></li>
这些是我的路由配置:
app.routing.module.ts
const routes: Routes = [
{
path: '',
pathMatch: 'full',
component: RootComponent,
},
{
path: '',
children: [
{
path: 'order',
loadChildren: './order/order.module#OrderModule',
}
]
}
order.module.ts
export const ROUTES: Routes = [
{
path: ':orderParty/:id',
component: OrderDetailComponent,
canDeactivate: [OrderDetailGuardService]
},
{
path: ':orderParty',
component: OrderListComponent
}
];
尝试了几件事,但是没有用。我注意到的是,在第二次单击时,“ OrderListComponent”的ngOnInit()没有被调用。
答案 0 :(得分:1)
您可以选择一些方法来解决Angular中的这一常见问题,最常见的方法是在此GitHub线程上使用该解决方案: https://github.com/angular/angular/issues/13831#issuecomment-319634921
constructor(private router: Router){
// override the route reuse strategy
this.router.routeReuseStrategy.shouldReuseRoute = function(){
return false;
}
this.router.events.subscribe((evt) => {
if (evt instanceof NavigationEnd) {
// trick the Router into believing it's last link wasn't previously loaded
this.router.navigated = false;
// if you need to scroll back to top, here is the right place
window.scrollTo(0, 0);
}
});
}
另一种解决方案是订阅您的路由器参数,并根据本文所建议的新参数处理更改:
this.activeRoute.params.subscribe(routeParams => {
this.loadUserDetail(routeParams.id);
});
https://medium.com/@mvivek3112/reloading-components-when-change-in-route-params-angular-deed6107c6bb
答案 1 :(得分:0)
是的,因为路由相同,其动态参数正在变化。读取更改的参数,您可以将路由器插入构造并读取
this.router.params.subscribe((params)=> {console.log(params)});
路由指向相同的组件,因此不会重新初始化。