Angular: Change the route without reloading
First off, the simple solution baffled me and made me slap my forehead because I can’t believe I haven’t thought of it sooner.
Problem : Our Angular 5 application uses Angular Material to create a stylish UI. We have a person information card with several tabs (mat-tab). We wanted the selected tab to be represented in the route, so that the user could share a link of current page (including the selected tab) to a colleague.
So, on tab changed, we needed to update the route.
https://myapp.com/person/132456/0
This would be the first tab (tabindex 0)https://myapp.com/person/132456/3
This would be the fourth tab (tabindex 3)
In order to update the route without a reload of the entire component (page) I had to resort to plain ol’ JavaScripts replaceState function.
This way, the current route is substituted for a new one.
function onTabChange(tabIndex){
const personId = <get person id>;
window.history.replaceState({}, '',`/person/${personId}/${tabIndex}`);
}
If you want to keep the history, you can use pushState.
Simple solutions are the best.