web-dev-qa-db-ja.com

Angular 2 ngOnInitは呼び出されません

バージョン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関数を呼び出すにはどうすればよいですか?

RegisterComponentLoginComponentの両方が使用します

_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_は、この場合の「概要」の単なる文字列です。

26
VincentKen

ゾーンの問題だと思います。

NgZoneを挿入(angular2/coreからインポート

constructor(private zone:NgZone) {}

this._browser.getStorageValue('api_key', api_key => {
  if (api_key) {
    this.zone.run(() => this._browser.gotoMain());
  }
})
61

OnInit()などのライフサイクルフックは、ディレクティブとコンポーネントで機能します。サービスのような他のタイプでは機能しません。これを確認してください link 詳しくは

0
Junaid