URL меняется, но угловой не перемещается - PullRequest
0 голосов
/ 11 октября 2019

У меня есть 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
    }
];  

Пробовал несколько вещей, которые там, но не работали. Я заметил, что при втором щелчке ngOnInit () из OrderListComponent не вызывается.

Ответы [ 2 ]

1 голос
/ 11 октября 2019

У вас есть несколько вариантов решения этой распространенной проблемы в 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

0 голосов
/ 11 октября 2019

Да, поскольку маршрут - это динамический параметр, который изменяется. Чтобы прочитать измененный параметр, вы можете ввести маршрутизатор в конструкции и прочитать параметр, например

this.router.params.subscribe ((params) => {console.log (params)});

Маршрут указывает на тот же компонент, следовательно, он не инициализируется повторно.

...