Angular 6 routerLink и фрагмент всегда начинаются сверху страницы
У меня есть навигационная панель с парой ссылок, которые нацелены ids
(фрагменты) той же страницы, и у меня есть некоторые другие ссылки, которые просты routerLink="anotherRoute"
, Мне удалось заставить это работать, добавив следующий фрагмент к ngOnInit
Метод навигации:
ngOnInit(): void {
this.router.events.subscribe(e => {
if (e instanceof Scroll) {
setTimeout(() => {
const element = document.getElementById(e.anchor);
if (element) {
element.scrollIntoView({ behavior: 'smooth', block: 'start' });
}
}, 0);
}
});
}
Во-первых, у меня все получилось, потому что я добавил нулевое время ожидания. По какой-то причине, если я удаляю материал тайм-аута, он находит элемент, но ничего не делает, он не перемещается к нему. Возможно, есть лучший способ сделать это, но пока это работает.
Проблема, с которой я столкнулся, заключается в том, что всякий раз, когда я нажимаю на ссылку на той же странице, угловая маршрутизация разрешает все правильно, однако навигация заставляет представление начать вверху страницы, а затем прокручивается в представление. Как будто он не узнает, что находится на той же странице, и ему просто нужно прокрутить. Я хотел бы избежать "навигации" - если это имеет смысл - когда я нахожусь на целевой странице и просто прокручиваю в окно привязки. Это возможно?