Skip to content
Advertisement

Angular 5 Scroll to top on every Route click

I am using Angular 5. I have a dashboard where I have few sections with small content and few sections with so large content that I am facing a problem when changing router while going to top. Every time I need to scroll to go to top.

How can I solve this issue so that when I change the router, my view always stay at the top?

Advertisement

Answer

There are some solutions, make sure to check them all ๐Ÿ™‚


Option1:

The router outlet will emit the activate event any time a new component is being instantiated, so we could use (activate) to scroll (for example) to the top:

app.component.html

JavaScript

app.component.ts

JavaScript

As the smooth scroll is not implemented well in Safari, use, for exemple, this solution for a smooth scroll:

JavaScript

If you wish to be selective, say not every component should trigger the scrolling, you can check it in an if statement like this:

JavaScript

Option2:

Since Angular6.1, we can also use { scrollPositionRestoration: 'enabled' } on eagerly loaded modules and it will be applied to all routes:

JavaScript

It will also do the smooth scrolling, already. However this has the inconvenient for doing it on every routing.


Option3:

An other solution is to do the top scrolling on router animation. Add this in every transition where you want to scroll to the top:

JavaScript
User contributions licensed under: CC BY-SA
3 People found this is helpful
Advertisement