网址更改,但角度无法导航

时间:2019-10-11 16:40:01

标签: javascript angular angular-ui-router single-page-application

我有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()没有被调用。

2 个答案:

答案 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)});

路由指向相同的组件,因此不会重新初始化。