Может показаться, что проблема связана с тем фактом, что щелчок сработает до того, как маршрутизатор фактически изменит маршрут, а затем вызов вашего метода changeroute();
ничего не изменит, потому что в это время маршрут остается прежним;однако при повторном щелчке маршрут уже был изменен после обработчика первого щелчка, поэтому он изменяется в соответствии с ожидаемым маршрутом.
Выходом является передача метода changeroute()
вслушатель изменения маршрута:
constructor(private router: Router) {
router.changes.subscribe((val) => { this.changeroute(); })
}
Вы также можете переместить обработчик щелчка вверх, т. е. перейти к элементу, который будет родительским для routerLink
, чтобы ваш щелчок происходил после нажатия нассылка, это может также работать.
Дальнейшее объяснение
Рассмотрим следующий компонент:
@Component({
selector: 'my-test',
template: `
<div (click)="onClick1()">
<button (click)="onClick2()">Click</button>
</div>`,
})
export class TestComponent {
onClick1(){
console.log('click 1')
}
onClick2(){
console.log('click 2')
}
}
Если кнопка нажата, она собираетсяотобразите консоль, как показано ниже:
click 2
click 1
Это означает, что распространение начинается от ребенка (подсказка) к родителям, пока не достигнет корневого узла (при условии, что у вас будет прослушиватель для всех родителей до корня).