9
votes

Portée dans TypeScript / Angularjs HTTP GET Demande

Je suis nouveau dans Thypscript et Angular.js et je me débats avec une demande HTTP GET. J'utilise définitivementtyped pour les définitions de type de l'angulaire.

Mon code de contrôleur ressemble à ceci: p>

TypeError: Cannot set property 'bonus' of undefined


0 commentaires

4 Réponses :


1
votes

ceci dans ceci.bonus = données; fait référence à la fonction de rappel à l'intérieur succès .

à la place, vous pouvez faire comme ceci: $ portée.vm.bonus = données;


3 commentaires

Cela ne fonctionne pas, car $ étendue est uniquement visible dans le constructeur et non dans la fonction dobet () .


@ 3x14159265 Déplacer dobet () dans votre constructeur et le déclarer comme une méthode sur $ étendue : $ scope.dobet = fonction () {...}; ou simplement passer $ étendue dans dobet () .


@ 3x14159265 des 2 options, je voudrais de préférence déplacer dobet à l'intérieur du contrôleur et le déclarer sur la portée.



1
votes

Vous pouvez mettre la méthode dans le constructeur afin d'accéder à la portée $ comme celle-ci: xxx

voici un tutoriel à propos de l'utilisation de l'angularjs avec dossier.


2 commentaires

Merci, j'ai déjà lu ce tutoriel. Mais est-ce vraiment la meilleure pratique de définir toutes les fonctions de portée dans le contrôleur? En outre, je lie la variable $ étendue.vm à mon instance de contrôleur pour ometter la nécessité de lier chaque variable de portée à mes variables de contrôleur. Donc, dans ce cas, il n'y aurait pas d'amélioration de l'utilisation de la liaison $ Scope.vm = ceci; .


@ 3x14159265 Je pense que c'est vraiment en train de tuer pour utiliser dactylography, il compliquait le JavaScript.



1
votes

Je n'ai pas utilisé type de documents, mais pour moi, cela ressemble à un problème de fermeture / portée. Votre rappel de succès est en cours d'exécution de manière asynchrone, de sorte que la valeur de ceci code> est différente à l'intérieur. Essayez de reliure la fonction Rappel avec Ceci code>.

this.http.get('http://localhost:9000/db').success(angular.bind(this,
    function(data: any, status: any) {this.bonus = data;});


1 commentaires

Ceci n'est pas nécessaire dans TypeScript. Voir la réponse 3x14159265.



10
votes

Ceci peut facilement être effectué à l'aide de l'expression Lambda de Torpscript:

doBet() {
    this.http.get('http://localhost:9000/db').success(
        (data, status) => this.bonus = data
    );
}


2 commentaires

Avez-vous d'autres explications sur ce sujet? Par exemple. Une raison pour laquelle nous devons utiliser l'expression de Lambda ici?


Dans Normal JS, vous auriez par exemple. this.http.get ('URL'). Succès (fonction (données, statut) {...}); , donc Ce n'est pas visible dans la fonction de réussite. L'expression de Lamba comme indiqué ci-dessus compile automatiquement à var _this = ceci; this.http.get ('URL'). Succès (fonction (données, statut) {_this.member = "quelque chose";}); , donc est visible dans la portée À travers la variable d'aide _THIS . J'espère que cela pourra aider.