Je dois attribuer les données souscrites à une variable et l'afficher en HTML, mais cela me donne toujours "indéfini"
J'ai essayé de déplacer la fonction sur le constructeur mais toujours le même problème! P> < Pré> xxx pré>
La console.log à l'intérieur de l'abcribe Affiche les données, mais celle de l'intérieur du constructeur ne peut pas, je m'attends à voir les données depuis que je l'assigne à une variable globale! P> < / p>
3 Réponses :
La console.log à l'intérieur de l'abonnée indique les données, mais celle de l'intérieur du constructeur ne peut pas, je m'attends à voir les données depuis que je l'attribue à une variable globale! P> blockQuote>
Oui, et si un
console.log code> est exécuté après em> une valeur est attribuée àrésultat code>, il va le connecter. Cependant, votreconsole.log code> à l'intérieur du constructeur est exécuté avant la fin de la demande. P>rien d'incorrect ne se passe ici - une demande est envoyée, des données sont récupérées et stockées. Seulement dans le constructeur, vous essayez d'y accéder avant de l'avoir. P>
Avez-vous une solution de contournement pour cela?
@Aminemaalfi Il n'y a pas de solution de contournement parce que c'est comme ça que ça marche. Consultez cette sortie - Stackoverflow.com/a/43055707/592831 , je ne pouvais pas y répondre mieux.
Essayez comme ceci:
export class EspacePartenaireComponent implements OnInit {
public result: any;
constructor(
private partenaireService: EspacePartenaireService
) {
}
getServices() {
this.partenaireService.myServices()
.subscribe(
data => {
console.log('got data', data); // <- add this line to verify data is received with some custom text before it
this.result = data;
}
);
}
ngOnInit() {
this.getServices();
}
}
me donnant toujours indéfini!
Pouvez-vous partager votre EspaceparttenAirService?
Importer {injectable} de '@ angular / noyau'; Importer {httpclient, httpheaders} de '@ angular / commun / http'; importer {environnement} de '../../frironments/environment'; @Ijecttable ({fourni: 'root "}) exportation classe espacepartenaireservice {constructeur (privé http: httpclient) {} myservices () {var username = sessionStorage.getem (" nom d'utilisateur "); renvoyer cela.http.get (Environnement.url + / Utilisateurs / $ {Nom d'utilisateur} / Services CODE>, {Sansrétiens: True}); }}
@Aminemaalfi super merci. Une dernière pièce du composant HTML. Peut partager cela aussi.
Le HTML est juste {{this.result}}
@Aminemaalfi j'ai mis à jour ma réponse Veuillez ajouter cette ligne à vérifier que vous avez obtenu certaines données à partir de votre backend: console.log ("Données", données); code> une fois que cela est fait vérifier dans vos outils de développement console. Vous devriez voir 'obtenu des données ...'
Les données sont là mais pas au moment de la console de la console.
Vous pouvez soit faire un fichier si dans le modèle ou, vous abonner à celui-ci dans le modèle p>
Bien que JavaScript soit synchrone, vous ne pouvez pas vous attendre à ce que
ceci.getservices () code> définit votreit.result code> immédiatement après l'appel, peu importe d'ici que vous le faites. Lorsque vous vous connectezDATA CODE>, avez-vous une valeur? Si vous connectezthis.result code> juste après que vous l'avez défini dans votre abonnement, je parie que vous obtenez une valeur :).Vous obtiendrez les données uniquement après l'abonnement, lorsque vous imprimez les données du constructeur, la variable n'est pas encore initialisée, lorsque les fonctions GetServices obtiennent la valeur, les données sont attribuées à la variable.