35

バージョン 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この場合、'Overview' は単なる文字列です。

4

1 に答える 1

74

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

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

constructor(private zone:NgZone) {}

this._browser.getStorageValue('api_key', api_key => {
  if (api_key) {
    this.zone.run(() => this._browser.gotoMain());
  }
})
于 2016-03-11T09:57:42.583 に答える