AngularJS promesse
AngularJS docs dire:
$q promesses sont reconnus par le moteur de template dans angulaire, ce qui signifie que dans les modèles, vous pouvez traiter les promesses attachées à un champ comme s'ils étaient les valeurs résultantes.
Si quelqu'un pourrait-il expliquer la raison de ce violon pas de travail? Il n'est pas possible de changer la valeur du champ. Mais l'attribution des promesses que $service http renvoie à un champ d'application champ fonctionne comme un charme.
Contrôleur:
function MyController($scope, $q, $timeout) {
this.getItem = function () {
var deferred = $q.defer();
deferred.resolve({
title: 'Some title'
});
return deferred.promise;
};
$scope.item = this.getItem();
}
Html:
<input type="text" ng-model="item.title">
Pourriez-vous me montrer comment vous avez attribué une promesse retourné par $http, qui a travaillé comme tu le voulais?
Voici pseudocode pour illustrer ce que je disais:
Oups, vous venez de créer exemple de test, et il semble ne pas travailler avec des promesse
Hey les gars, pour le faire fonctionner, j'ai dû utiliser
Voici pseudocode pour illustrer ce que je disais:
$scope.item = $http({method: 'post', url: '/find/my/item/'}) .then(function (response) { return response.item; });
un Autre exemple qui utilise $ressource, peut être trouvé dans ce tutoriel. À partir de la ligne: Notice how in PhoneListCtrl we replaced ... with $scope.phones = Phone.query();
Oups, vous venez de créer exemple de test, et il semble ne pas travailler avec des promesse
Hey les gars, pour le faire fonctionner, j'ai dû utiliser
.success(function(){}).then(function(r){if (r.data["my-result"])return r.data["my-result"];});
OriginalL'auteur Raman Chodźka | 2012-12-29
Vous devez vous connecter pour publier un commentaire.
Vous avez besoin d'utiliser la fonction de() sur la promesse de l'objet:
Dans votre cas, je ne pense pas que vous avez besoin d'une promesse. Angulaire de dollars de regarder le système sera prendre soin des choses. Il suffit de retourner un objet dans votre fonction, pas un type primitif:
Le deuxième exemple que vous avez donné n'a pas l'air plus simple que le premier 😉 d'Ailleurs, ça ne va pas comme prévu, car $http.get() sera résolu avec json représentant point , pas titre Donc
this.getItem().then(function(result) { $scope.item = result; });
semble tout à fait acceptable (j'ai juste changé de cette.item = résultat à $champ d'application.item = résultat)Ah, en effet que cela doit avoir été portée. Je vais le modifier de sorte que vous pouvez l'accepter.
Je ne suis pas sûr que cela concerne le fait que AngularJS revendications promesses peuvent être utilisés lors de l'affectation comme s'ils étaient le résultat... Les docs encore le dire et j'aimerais savoir pourquoi son code ne fonctionne pas. Peut-être qu'il ne fonctionne que si le différé résout une fois que le modèle a fini de digérer? Ce n'est pas typique pour résoudre de façon synchrone, avant de revenir à la promesse.
OriginalL'auteur asgoth
Je crois que la raison de votre premier violon ne fonctionne pas parce que vous êtes essentiellement de liaison de la portée de la propriété
item
à une promesse. Lorsque vous essayez de modifier la valeur en tapant dans le champ de texte, angulaire avis de l'activité, puis réassigne/réinitialise la valeur deitem
à la suite de la promesse (qui n'a pas changé).De la solution fournie par @asgoth jeux/affecte la valeur de
item
une fois, lorsque la promesse est résolu. Il n'y a pas de liaison se passe ici (j'.e,item
n'est pas lié à la promesse), afin de modifier la valeur par l'intermédiaire de la zone de texte modifie la valeur.OriginalL'auteur Mark Rajcok
Son comme @Mark a dit, ici vous pouvez trouver une Exemple De Travail de votre extrait.
Fondamentalement, vous, de retour d'un objet et ne lie pas le modèle lui-même.
this.getItem();
.OriginalL'auteur Ivo