2016-07-06 6 views
1

起動時にAppComponentの別のパスに移動しようとしていますが、動作していないようです。私のapp.componentでは、私は私のngOnInit方法で移動しようとしています:私のmain.tsで角度2 - ブートストラップ後にナビゲートするには?

export class AppComponent implements OnInit { 

    constructor(private _router: Router) { 
    } 

    ngOnInit() { 
     console.log("IN ngOnInit!!!!!!!!!!!!!!!!!!!!"); 
     this._router.navigate(["/login"]).then(() => console.log("DONE Navigation!!!!!!!!!!!!!!!!!!!!")).catch(err => console.log("Error!!!!!: " + err)); 
     console.log("GOING OUT ngOnInit!!!!!!!!!!!!!!!!!!!!"); 
    } 
} 

、私はコンポーネントブートストラップ:

bootstrap(AppComponent, [ 
    APP_ROUTER_PROVIDERS 
]).then(() => console.log("DONE BOOTSTRAP")); 

そして、コンソール出力は次のとおりです。

IN ngOnInit!!!!!!!!!!!!!!!!!!!! 
GOING OUT ngOnInit!!!!!!!!!!!!!!!!!!!! 
DONE Navigation!!!!!!!!!!!!!!!!!!!! 
DONE BOOTSTRAP 

私の推測では、APP_ROUTER_PROVIDERSのブートストラップが完了していないため、ナビゲーションを実行できません。ブートストラップの完了後にナビゲートを呼び出すことができるように、私がフックできるイベントはありますか?私はAngular 2 RC4です。

ありがとうございます!

答えて

1

現在のところ、メインコンポーネントのOnInitでnavigate関数を呼び出すことはできません。この問題は、githubの上で開いて開くありますこのhttps://github.com/angular/angular/blob/master/modules/@angular/router/src/common_router_providers.ts#L54-L61

により、バグの原因によるものである:https://github.com/angular/angular/issues/9101

現時点では、クイックフィックスはsetTimout()機能であなたのナビゲートコールを置くことであろう。

+0

ありがとうございました! –

+0

ナビゲーションパスを決定するためにいくつかのロジックを実行する必要があるので、代わりにこれを答えとして選択しました。 –

2

理想的には、角度ルータ自体にリダイレクトの責任を与えるべきです。特定のルートが一致していない場合、(空白)を/loginページにリダイレクトする責任がある1つのルートを追加します。

{ 
    path: '', //blank will redirectTo `/login` 
    redirectTo: '/login', 
    pathMatch: 'full' 
}, 
+0

ありがとうございます。それが私が望む行動です! –

+0

@wm_よろしくお願いします。ありがとう:-) –

関連する問題