Angular сохранить положение прокрутки при использовании роутера - PullRequest
1 голос
/ 08 апреля 2020

Я использую представление Master-Detail, где я перехожу к деталям (дочернему маршруту) при выборе в главном списке. Я пытаюсь сохранить свою позицию прокрутки в главном списке, когда я возвращаюсь от подробного вида к главному списку.

Я пытался использовать

RouterModule.forRoot([{path: '', redirectTo: 'home', pathMatch: 'full'}], {scrollPositionRestoration: 'enabled'}),

в моем модуле маршрутизации приложений. без успеха.

Я думал, что это не работает, потому что прокрутка может сработать, прежде чем мой контент списка будет загружен успешно, поэтому я попробовал другой подход. В моем компоненте списка, где мой контент инициализируется, я добавил эту логику c:

this.router.events.pipe(
        filter(event => event instanceof Scroll),
    ).subscribe(event => {
        const scrollEvent = event as Scroll;
        of(scrollEvent).pipe(delay(1)).subscribe(scroll => {
            if (scroll.position) {
                this.viewportScroller.scrollToPosition(scroll.position);
            } else {
                this.viewportScroller.scrollToPosition([0, 0]);
            }
        })
    })

Теперь это работает, когда я перехожу к подробному виду и нажимаю кнопку "Назад". Однако это не работает, когда я использую встроенную навигацию назад в компоненте детализации, используя маршрутизатор в качестве scroll.position, всегда будет нулевым:

this.router.navigate(['../'], {relativeTo: this.route});

Любая помощь приветствуется!

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...