ngafterviewinit - Angular 2 ngOnInit no llamado
ngoninit constructor angular (2)
Los ganchos de ciclo de vida, como OnInit (), funcionan con directivas y componentes. No funcionan con otros tipos, como un servicio. Revisa este link para más
Estoy construyendo una aplicación Angular 2 con versión beta.8.
En esta aplicación tengo un componente que implementa OnInit.
En este componente tengo la función ngOnInit, pero la función ngOnInit nunca se llama.
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 se redirigen a Descripción general mediante: router.navigate([''Overview''])
.
Si utilizo la ruta de vista general como predeterminada, veo ngOnInit dentro de la consola.
Así que la forma en que redirecciono mi página parece ser el problema.
¿Cómo se puede redirigir a la página de información general y llamar a la función ngOnInit?
Tanto el RegisterComponent
como el 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 ''Información general''.
Supongo que es un problema de zona.
Inyectar NgZone
(importación desde angular2/core
constructor(private zone:NgZone) {}
this._browser.getStorageValue(''api_key'', api_key => {
if (api_key) {
this.zone.run(() => this._browser.gotoMain());
}
})