Estoy creando una aplicación Angular 2 con la versión beta.8.
En esta aplicación tengo un componente que implementa OnInit.
En este componente tengo la función ngOnInit, pero nunca se llama a la función ngOnInit.
import { Component, OnInit } from 'angular2/core'; @Component({ templateUrl: '/app/html/overview.html' }) export class OverviewComponent implements OnInit { ngOnInit() { console.log('ngOnInit'); } }El enrutamiento de la aplicación:
@RouteConfig([ { path: '/overview', name: 'Overview', component: OverviewComponent }, { path: '/login', name: 'Login', component: LoginComponent }, { path: '/register', name: 'Register', component: RegisterComponent, useAsDefault: true } ]) Hay una verificación para ver si el usuario ya ha iniciado sesión dentro de LoginComponent y RegisterComponent.
Si el usuario ha iniciado sesión, los componentes redirigen a Overview usando: router.navigate(['Overview']) .
Si uso la ruta Overview como predeterminada, veo ngOnInit dentro de la consola.
Entonces, la forma en que redirijo mi página parece ser el problema.
¿Cómo se puede redirigir a la página de descripción general y llamar a la función ngOnInit?
Tanto el componente de RegisterComponent como el componente de inicio de LoginComponent utilizan
ngOnInit() { this._browser.getStorageValue('api_key', api_key => { if (api_key) { this._browser.gotoMain(); } }) }El navegador es una clase en la que almaceno el código específico del navegador. Esta es la función gotoMain:
gotoMain() { this._router.navigate([this._browser.main]); } this._browser.main es solo una cadena en este caso, 'Descripción general'.
Supongo que es un problema de zona.
Inyectar NgZone (importar desde angular2/core
constructor(private zone:NgZone) {} this._browser.getStorageValue('api_key', api_key => { if (api_key) { this.zone.run(() => this._browser.gotoMain()); } })