Angulaire 2 ngOnInit pas appelé
Je suis bâtiment Angulaire à 2 application avec la version bêta.8.
Dans cette application j'ai un composant qui implémente OnInit.
Dans cette partie, j'ai la fonction ngOnInit, mais le ngOnInit fonction n'est jamais appelée.
import { Component, OnInit } from 'angular2/core';
@Component({
templateUrl: '/app/html/overview.html'
})
export class OverviewComponent implements OnInit {
ngOnInit() {
console.log('ngOnInit');
}
}
Le Routage de l'application:
@RouteConfig([
{
path: '/overview',
name: 'Overview',
component: OverviewComponent
},
{
path: '/login',
name: 'Login',
component: LoginComponent
},
{
path: '/register',
name: 'Register',
component: RegisterComponent,
useAsDefault: true
}
])
Il y a une case pour voir si l'utilisateur est déjà connecté à l'intérieur de la LoginComponent et RegisterComponent.
Si l'utilisateur est connecté, les composants de rediriger un Aperçu de l'aide: router.navigate(['Overview'])
.
Si j'utilise l'Aperçu de l'itinéraire par défaut, je ne vois ngOnInit à l'intérieur de la console.
La façon dont je rediriger ma page semble être le problème.
Comment pouvez rediriger vers la page de Présentation et d'appeler la ngOnInit fonction?
À la fois la RegisterComponent
et la LoginComponent
utilisation
ngOnInit() {
this._browser.getStorageValue('api_key', api_key => {
if (api_key) {
this._browser.gotoMain();
}
})
}
Navigateur est une classe dans laquelle je stocke navigateur de code spécifique.
C'est le gotoMain fonction:
gotoMain() {
this._router.navigate([this._browser.main]);
}
this._browser.main
est juste une chaîne de caractères dans ce cas, 'vue d'ensemble'.
- Avez-vous fait en sorte
OverviewComponent
œuvres? Si oui, Même si vous n'importez pas lesOnInit
et met en œuvreOnInit
,ngOnInit
fonctionne. - J'ai ajouté un
message: string = 'test'
à la OverviewComponent et a essayé de l'afficher dans la vue avec{{message}}
et cela a fonctionné. - Oh ! Dans ce cas, j'ai besoin de voir votre code. Ok. Juste essayer de retirer ce que j'ai suggéré et voir si cela fonctionne !
- à l'intérieur de la
RegisterComponent
et à l'intérieur de laLoginComponent
j'ai un travailngOnInit()
dans lequel je vérifie si l'utilisateur est connecté. Si l'utilisateur est connecté, j'utilisethis._router.navigate['Overview']
- Cela n'aide pas beaucoup. Où est le code qui appelle
this._router.navigate['Overview']
. Dans le constructeur, un rappel à partir d'une bibliothèque qui communique avec le serveur, ...? - Il fonctionne si je l'ai mis Aperçu que mon itinéraire par défaut, mais pas si les obtenir à l'aperçu à travers
router.navigate['Overview']
. - c'est l'intérieur de la
ngOnInit()
de monLoginComponent
this._browser.getStorageValue('api_key', api_key => { if (api_key) { this._browser.gotoMain(); } })
- modifier votre code. nous montrer
route.config
et commeGunter
a dit. - plnkr.co/modifier/cPDpUtTpklymlFf7iQhv?p=preview essayez de jouer avec elle si possible.
- N Gunter désolé de ne pas être en mesure de mettre des
..
accent en votre nom via le clavier. - pas de soucis 😀 Nous utilisons
ue
,oe
au lieu deü
,ö
sur les systèmes où les accents ne sont pas disponibles, mais justeu
,o
est très bien en utilisation informelle. - Ok Günter 🙂
Vous devez vous connecter pour publier un commentaire.
Je suppose que c'est une question de la zone.
Injecter
NgZone
(importation deangular2/core
addEventListener()
,setTimeout()
, et d'autres Api asynchrones sont patché pour informer Angulaire lors de l'action asynchrone est arrivé de relancer la détection de changement. Cela rend la détection de changement tout à fait efficace. Lorsque le code est appelé que d'une certaine façon circuments Angulars zone, Angulars de la détection de changement n'est pas un coup de pied dans. Si une méthode (même à partir d'une composante Angulaire ou similaire) est appelée à partir du code qui a été appelée à l'extérieur Angulars de la zone, tout se passe à l'extérieur de la zone jusqu'à ce que cet événement est entièrement traitée. Aveczone.run(...)
vous forcer l'exécution en arrière dans Angulars de la zone.addEventListener()
, vous pouvez utiliserBrowserDomAdapter
et il va le faire pour vous.