2016-05-06 12 views
1

私は遅延ロードされたコンポーネントを持っており、コンポーネントstuff/thirdpartyライブラリなどをサーバからロードするときにプリローダを表示したい。 表示/非表示ローダー可能性を持つコンポーネントを作成し、私は誰かが(コンポーネントのロード前)のルートを変更ANSコンポーネントがロードされたときに、それを隠そうとするとき、それを表示したい:私はこれをしようとどのようにAngular2ルータの変更を検出する前に経路を変更する

また、各コンポーネントごとにローダーサービスを含めることを避け、ngOnInit(たとえば)のローダーを非表示にしたいと考えています。今私は、(app.js)

しかし、私はどのように知らないトップレベルにそれを作るしようと

ため

まず:正しくルータおよびshowローダーを(今私が作る変更しようとする試みを検出する方法がわかりませんそれは非常に醜いです - ちょうど私たちがナビゲーションリンクをクリックするとイベントが発生します....そして、私はプログラミング方法でナビゲートしようとするとローダーが表示されないので悪いです。ルータが新しいコンポーネントをレンダリングする前に、変更を検出するための方法がありますか?

は、私が見た:topic 1topic 2 router.subscribe(パス=> {/非表示ローダアクション/})

正常に動作していない
理由 1:それはコンポーネントのレンダリングや火災の後に動作した場合にのみ、すべてのコンポーネントのものがしますロードする前に、ローダーを表示したい 2:componnetがロードされ、コンポーネント間をナビゲートしてロードされたコンポーネントに戻るとき、このサブスクリプションはすぐに起動されます。だから、私たちが荷物を積んだコンポーネントに戻った後、最初の購読はそれ以降は起動せず、ローダーが表示され、隠されることはありません。私はなぜ(一部のコンポーネントに解雇されていないrouter.nextのでわかりませんし、私のコードがある

トリガされない退会

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



    } 

答えて

0

私はあなたの目的のためにそれを試していないが、私は思いますCanActivateは試してみる価値はある。ルートがアクティブになる前に、それが呼び出される。シェアードサービスにデータを渡す方法については

は(これは、またはすでにAngulars RC.xバージョンのルータに変更されています)https://github.com/angular/angular/issues/4112を参照してください。

+0

こんにちはガンター!ありがとうあなたの答えはたくさんありますが、CanActivateでいくつかの例を見せてください。私はそれを見てそれを使用しようとしたが、私にとってはうまくいかなかったので、私は何か間違ったことをするかもしれない。 _ @ CanActivate((次、前)=> { にconsole.log(次、前); })私に エクスポートMyClassの......._ 何も表示はなく、現在または以前の経路 – Velidan

+0

Angular2バージョンについて –

+0

2.0.0-beta.15このバージョンでは機能しません。 – Velidan

関連する問題