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

Во-первых, у меня все получилось, потому что я добавил нулевое время ожидания. По какой-то причине, если я удаляю материал тайм-аута, он находит элемент, но ничего не делает, он не перемещается к нему. Возможно, есть лучший способ сделать это, но пока это работает.

Проблема, с которой я столкнулся, заключается в том, что всякий раз, когда я нажимаю на ссылку на той же странице, угловая маршрутизация разрешает все правильно, однако навигация заставляет представление начать вверху страницы, а затем прокручивается в представление. Как будто он не узнает, что находится на той же странице, и ему просто нужно прокрутить. Я хотел бы избежать "навигации" - если это имеет смысл - когда я нахожусь на целевой странице и просто прокручиваю в окно привязки. Это возможно?

0 ответов

Другие вопросы по тегам