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
4 Réponses :
à la place, vous pouvez faire comme ceci: ceci code> dans
ceci.bonus = données; code> fait référence à la fonction de rappel à l'intérieur
succès code>. p>
$ portée.vm.bonus = données; code> p>
Cela ne fonctionne pas, car $ étendue code> est uniquement visible dans le constructeur et non dans la fonction
dobet () code>.
@ 3x14159265 Déplacer dobet () code> dans votre constructeur et le déclarer comme une méthode sur
$ étendue code>:
$ scope.dobet = fonction () {...}; code> ou simplement passer
$ étendue code> dans
dobet () code>.
@ 3x14159265 des 2 options, je voudrais de préférence déplacer dobet code> à l'intérieur du contrôleur et le déclarer sur la portée.
Vous pouvez mettre la méthode dans le constructeur afin d'accéder à la portée $ comme celle-ci: voici un tutoriel à propos de l'utilisation de l'angularjs avec dossier. p> p>
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 code> à 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; code>.
@ 3x14159265 Je pense que c'est vraiment en train de tuer pour utiliser dactylography, il compliquait le JavaScript.
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;});
Ceci n'est pas nécessaire dans TypeScript. Voir la réponse 3x14159265.
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 ); }
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) {...}); code>, donc
Ce code> 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";}); code>, donc code> est visible dans la portée À travers la variable d'aide
_THIS code>. J'espère que cela pourra aider.