バージョンbeta.8でAngular 2アプリを作成しています。
このアプリには、OnInitを実装するコンポーネントがあります。
このコンポーネントには関数ngOnInitがありますが、ngOnInit関数は呼び出されません。
_import { Component, OnInit } from 'angular2/core';
@Component({
templateUrl: '/app/html/overview.html'
})
export class OverviewComponent implements OnInit {
ngOnInit() {
console.log('ngOnInit');
}
}
_
アプリのルーティング:
_@RouteConfig([
{
path: '/overview',
name: 'Overview',
component: OverviewComponent
},
{
path: '/login',
name: 'Login',
component: LoginComponent
},
{
path: '/register',
name: 'Register',
component: RegisterComponent,
useAsDefault: true
}
])
_
ユーザーがLoginComponentおよびRegisterComponent内で既にログインしているかどうかを確認するチェックがあります。
ユーザーがログインしている場合、コンポーネントはrouter.navigate(['Overview'])
を使用して概要にリダイレクトします。
デフォルトとして概要ルートを使用する場合、コンソール内にngOnInitが表示されます。
そのため、ページをリダイレクトする方法に問題があるようです。
概要ページにリダイレクトしてngOnInit関数を呼び出すにはどうすればよいですか?
RegisterComponent
とLoginComponent
の両方が使用します
_ngOnInit() {
this._browser.getStorageValue('api_key', api_key => {
if (api_key) {
this._browser.gotoMain();
}
})
}
_
ブラウザは、ブラウザ固有のコードを保存するクラスです。これはgotoMain関数です。
_gotoMain() {
this._router.navigate([this._browser.main]);
}
_
_this._browser.main
_は、この場合の「概要」の単なる文字列です。
ゾーンの問題だと思います。
NgZone
を挿入(angular2/core
からインポート
constructor(private zone:NgZone) {}
this._browser.getStorageValue('api_key', api_key => {
if (api_key) {
this.zone.run(() => this._browser.gotoMain());
}
})
OnInit()などのライフサイクルフックは、ディレクティブとコンポーネントで機能します。サービスのような他のタイプでは機能しません。これを確認してください link 詳しくは