ПРИМЕЧАНИЕ. скрипта использует старую версию Angular и что она больше не работает, поскольку с 1.2 механизм шаблона Angular не обрабатывает прозрачно promises.
Я просматриваю цепочку promises, чтобы заполнить область видимости, а затем автоматически обновить область.
У меня возникают проблемы с этим, хотя... Если я назову "тогда" по уже разрешенному обещанию, он создаст новое обещание (которое вызовет функцию успеха асинхронно, но почти сразу). Я думаю, проблема заключается в том, что мы уже покинули цикл дайджеста к моменту вызова функции успеха, поэтому dom никогда не обновляется.
Вот код:
<div ng-controller="MyCtrl">
Hello, {{name}}! <br/>
{{name2}}<br/>
<button ng-click="go()">Clickme</button><br/>
{{name3}}
</div>
var myApp = angular.module('myApp',[]);
function MyCtrl($scope, $q) {
var data = $q.defer();
setTimeout(function() {$scope.$apply(data.resolve("Some Data"))}, 2000);
var p = data.promise;
$scope.name = p.then(angular.uppercase);
$scope.name2 = p.then(function(x) { return "Hi "+x;});
$scope.go = function() {
$scope.name3 = p.then(function(x) {
// uncomment this to make it work:
//$scope.$apply();
return "Finally: "+x;
});
};
}
Есть ли способ сделать эту работу без вызова $apply каждый раз, когда я связываю promises?