2017-09-12 11 views
1

URLにリダイレクトしてリロードする必要がある特別な条件があります。Angular Router navigateとreloadは、コンポーネントを1回レンダリングする必要がありますが、2回レンダーする必要があります。

私は、ルータからこのメソッドを使用しています:

this.reload()
this.router.navigateByUrl('login'); 
this.reload(); 

は、ページをリロード強制する角度ゾーンの外に働いている機能です。私はサーバーから来るいくつかの資産を制御できないので、リロードを強制する必要があります。

リロードのコードは次のとおりです。

public reload(): any { 
    return this.zone.runOutsideAngular(() => { 
     location.reload() 
    }); 
} 

問題がある:私は初めに、ログインに移動していますし、ページがデフォルトの動作であるリロードされる

必要な出力:

だけでコンポーネントをレンダリングせずに移動し、私たちはサイトのほとんどでログインページにリダイレクトされているいくつかの不正なURLを打ったときのようにリロードします。

+0

あなたは 'navigateByUrl'をスキップし、代わりにウィンドウの' location'プロパティを置き換えます: 'location.replace( 'myUrl');' – Philipp

+0

これは、より多くをリロードし、ルートのURLを変更することもありません。 – PaladiN

答えて

4

私がやっていることに興味を持っている人は、まずURLに行き、ページをリロードして問題を解決しました。

まずインポートLocation:次に

import { Location } from "@angular/common"; 

あなたが期待している特定のURLに移動しgo()を使用しています。

this.location.go('login'); 

次に、reloadメソッドを使用してブラウザをリロードします。リロード機能がある

this.reload(); 

public reload(): any { 
    return this.zone.runOutsideAngular(() => { 
     location.reload() 
    }); 
} 

注:あなたが移動し、二回ユーザーにページの負荷を示すことなく、リロードする場合

この方法が唯一適しています。

関連する問題