I have lazy loaded components and I want to show preloader when we loading component stuff/thirdparty library etc from server.
How I try to do this: Create component with show/hide loader possibility and I want to show it when someone try to change route (before component loading) ans hide it when component is loaded.
Also I want to avoid including per each component a loader service and manyally hide loader on ngOnInit (for example). Now I try make it on top level (app.js)
But I don't know how, because
First: Don't know how correctly detect attempt to change router and show loader (now i make it very ugly - just fire event when we click on navigation link....and it's bad because when I try to navigate via programming methods - loaders will not be showed). Maybe some way exist for detect changes before router render new component?
I saw: topic 1 topic 2 router.subscribe(path => {/hide loader action/})
not working correctly because
1: it works after component rendering and fires only when all component stuff will be loaded, I want to show loader before loading.
2: when componnet is loaded and we try to navigate between components and return on loaded component - this subscription will be fired immediately. So it's mean that after we returned to a laded component first subscribtion will be fired nad after that - loader will be showed :) and never hidden. I don't know why (because on some component router.next not be fired and unsubscription not will be triggered
there is my code
private showPreloader() {
let a;
this._loadingService.controlledLoaderShow();
a = this._router.subscribe((val) => {
console.log("Hide preloader");
this._loadingService.controlledLoaderHide();
a.unsubscribe();
},
(err) => {console.log(`Error in app.ts showPrealoder ${err}`)});
}