Je suis en train de lier une promesse à une vue. Je ne sais pas si vous pouvez le faire directement, mais c'est ce que je tente de faire. Les idées de ce que je fais de mal?
Remarque: la source est un peu artificiel, avec le délai d'attente et utilise des données statiques, mais c'est pour rendre le code plus facile à diagnostiquer.
EDIT: JSFiddle Page: http://jsfiddle.net/YQwaf/27/
EDIT: SOLUTION: Il s'est avéré que vous pouvez lier directement promesses. J'ai eu deux problèmes avec mon code d'origine:
- À l'aide de setTimeout() à la place de l'angulaire de l' $timeout a été un problème. Angulaire ne le sait pas besoins d'actualisation de l'INTERFACE utilisateur lorsque la temporisation est déclenchée ( Vous pouvez résoudre ce avec $scope.$appliquer à l'intérieur de setTimeout, ou vous pouvez simplement utiliser $timeout )
- La liaison à une fonction qui a retourné une promesse a été un problème. Si elle est appelée une deuxième fois, il fait encore une autre promesse. Le mieux est de définir un champ d'application variable de la promesse et de créer un seul la promesse en tant que de besoin. (Dans mon cas, c'était l'appel de $scope.$montre le Code de Pays)
HTML:
<div ng:controller="addressValidationController">
Region Code <select ng:model="regionCode" ng:options="r.code as r.name for r in getRegions()"/>
Country Code<select ng:model="countryCode"><option value="US">United States</option><option value="CA">Canada</option></select>
</div>
JS:
function addressValidationController($scope, $q) {
var regions = {
US: [{code: 'WI',name: 'Wisconsin'}, {code: 'MN',name: 'Minnesota'}],
CA: [{code: 'ON',name: 'Ontario'}]
};
$scope.getRegions = function () {
var deferred = $q.defer();
setTimeout(function () {
var countryRegions = regions[$scope.countryCode];
console.log(countryRegions);
if(countryRegions === undefined) {
deferred.resolve([]);
} else {
deferred.resolve(countryRegions);
}
}, 1000);
return deferred.promise;
};
}