2017-07-27 2 views
0

je me suis inscrit sur les changements dans le routage:Comment écouter les changements dans le routage Angular?

public ngOnInit() { 
    this.subscription = this.activateRoute.params.subscribe(params => { 
     this.language = params['id']; 
    }); 

    console.log(this.language); 
    } 

Mais quand je change de chemin d'itinéraire par cliquez sur le lien Je ne peux pas voir console.log(this.language);. Ce n'est pas affiché. Il n'y a pas d'erreurs.

Pourquoi?

+0

Copie possible de [Comment renvoyer la réponse d'un appel Observable/http/async dans angular2?] (Https://stackoverflow.com/questions/43055706/how-do-i-return-the-response- depuis-un-observable-http-async-call-in-angular2) – echonax

+1

déplacez simplement 'console.log' à l'intérieur de' params => {...} function' –

Répondre

0

subscribe est asynchrone. Le console.log() peut être appelé avant que cette instruction this.language = params['id']; ne soit appelée (nous ne connaîtrons pas le flux car il est asynchrone).

Vous devez mettre console.log(this.language); dans la fonction à l'intérieur subscribe:

this.subscription = this.activateRoute.params.subscribe(params => { 
    this.language = params['id']; 
    console.log(this.language); 
}); 

Cela fera en sorte que console.log(this.language); est appelé juste après this.language = params['id'];, puisque les deux sont synchrones déclaration.

+0

J'ai essayé ça ne marche pas – Daniel

+2

@Daniel try 'console.log (params)' votre variable 'params' a-t-elle même une propriété' id'? – echonax

+0

@Daniel Regardez dans votre appModule où vous enregistrez vos URL de chemin, a-t-il quelque chose comme ceci: '/ {yourUri} /: id' ... Pour obtenir' params ['id'] ', votre URL de chemin devrait avoir cette partie ': id' – samAlvin

1

Inscription méthode est utilisée pour vous abonner aux messages qui sont envoyés à un observable.This est fonction ASYNC, donc vous devez imprimer « this.language » valeur abonnez-vous à l'intérieur

public ngOnInit() { 
     this.subscription = this.activateRoute.params.subscribe(params => { 
      this.language = params['id']; 
      console.log(this.language); 
     }); 


     } 
+0

Peut-être un problème de routage: J'ai le chemin URL: 'http : // localhost: 3000/#/language/en' et cela a changé. – Daniel