Я попытался убрать детали и сделать это довольно обобщенно...
Используя 1.2 rc2, мой код работал нормально, после обновления до стабильной версии 1.2 и исправления изменений $parse я столкнулся с проблемой привязки. До обновления следующий код работал без проблем. updateChildObject()
вызывается с html-страницы.
.when('/the-page/', {
controller: function($scope, serviceResults, FactoryService) {
$scope.object.childObject = serviceResults;
// this function used to work. Now assigns the function to the
// scope rather than the results
$scope.updateChildObject = function(args) {
$scope.object.childObject = FactoryService.getSomethingFromServer(args);
};
},
resolve: {
serviceResults: function(FactoryService) {
return FactoryService.getSomethingFromServer(args);
}
}
Поскольку сейчас это не удается ($scope.object.childObject, кажется, устанавливается как функция, а не результаты), я считаю, что подходящий способ решить эту проблему - через обещание. (Обратите внимание, что сама служба успешно использует обещание.) Однако у меня возникают трудности с обновлением $scope, когда обещание разрешено.
Я считаю, что следующий код находится на правильном пути. $q вводится в контроллер.
...
$scope.updateChildObject = function(args) {
var defer = $q.defer();
defer.promise.then(function() {
return FactoryService.getSomethingFromServer(args);
});
$scope.object.childObject = defer.resolve();
};
...
Так может ли кто-нибудь сказать мне, что я делаю неправильно здесь? Обещания — это всего лишь одна из тех вещей, которые мне еще не очень понравились.