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}`)});
  }
 
     
    