当我在angular 4(现在是5)中从一个组件路由到另一个组件时,页面没有滚动到顶部?

当我在angular 4(现在是5)中从一个组件路由到另一个组件时,页面没有滚动到顶部?,angular,angular5,Angular,Angular5,我使用的是angular 5,cli版本为1.5.2,我面临路由问题 当从一条路线导航到另一条路线,然后向下滚动一点并导航回上一条路线时,页面将保持在相同的滚动位置。 当前从一个视图导航到另一个视图,然后向下滚动一点并导航回上一个视图。页面保持在相同的滚动位置 但当我从一条路线导航到另一条路线时,我需要将页面滚动到顶部 我还需要知道这是否是angular中的默认路由行为?您可以注册路由更改侦听器 constructor(private router: Router) { } ngOnI

我使用的是angular 5,cli版本为1.5.2,我面临路由问题

当从一条路线导航到另一条路线,然后向下滚动一点并导航回上一条路线时,页面将保持在相同的滚动位置。 当前从一个视图导航到另一个视图,然后向下滚动一点并导航回上一个视图。页面保持在相同的滚动位置

但当我从一条路线导航到另一条路线时,我需要将页面滚动到顶部


我还需要知道这是否是angular中的默认路由行为?

您可以注册路由更改侦听器

constructor(private router: Router) { }

    ngOnInit() {
        this.router.events.subscribe((evt) => {
            if (!(evt instanceof NavigationEnd)) {
                return;
            }
            window.scrollTo(0, 0) // for example
        });
    }

如果您只想在从主组件导航到另一个组件时滚动到顶部,请确保随后取消订阅。通过取消订阅,您可以确保不会破坏默认的“后退”按钮行为

subs: Subscription;  
constructor(private router: Router) { }

ngOnInit() {
    this.subs = this.router.events.subscribe((evt) => {
        if (!(evt instanceof NavigationEnd)) {
            return;
        }
        window.scrollTo(0, 0) // for example
        this.subs.unsubscribe();
    });
}

Angular团队已在Angular 6.1中使用
scrollPositionRestoration
选项解决了此问题


请参阅我的ans:

我已在app-component.ts文件中添加了这些代码片段,但这里的问题是,如果我导航回上一个组件,它将占据上一个组件页面的顶部,这是不正确的。这意味着代码在所有路由上都会滚动到顶部。它打破了默认的“后退”按钮行为。回过头来应该记得上一个滚动位置。人们已经为这个问题提供了他们的答案很长一段时间了。这是我见过的最新一次,我提供了我自己的答案。我觉得被接受的答案只会带来更多的问题,因为它破坏了浏览器后退和前进按钮的原有功能。我的答案解决了问题,并保持浏览器的前后功能不变。window.scrollTo(0,0)不适用于angular 5和6