Я знаю, что эта проблема несколько раз задавалась в stackoverflow, но я не смог найти правильного ответа.
Чего мне нужно добиться, так это иметь возможность инициировать некоторый асинхронный вызов в одном контроллере, а когда результат возвращается, обновить $scope в каком-то другом контроллере.
Я понимаю, что мне следует использовать общую службу, которая на самом деле делает вещи $http, но я не могу обновить область действия другого контроллера.
Вот мой код:
Просмотреть
<div class="screens" ng-controller="framesController">
<div class="scroller scroll-pane" frames-scroll-pane>
<div class="overview">
{{frames}}
</div>
</div>
</div>
Сервис
angular.module('BrightspotApp.models', []).
factory('framesModel', function($http,globals){
var api_path = 'clickard/GetClickardById/';
var sharedService = {};
sharedService.getAsync = function (id) {
sharedService.frames = {};
$http.get(globals.serverUrl + api_path + id).
success(function (data, status, headers, config) {
sharedService.frames = data;
}).error(function (data, status, headers, config) {
console.log('HTTP error');
});
};
return sharedService;
});
Контроллеры
angular.module('BrightspotApp.controllers', []).
/**
* Top menu controller
*/
controller('menuController', function($scope,framesModel){
$scope.clicked = false;
$scope.toggle = function (item) {
$scope.clicked = !$scope.clicked;
if ($scope.clicked){
framesModel.getAsync(1);
}
};
$scope.itemClass = function(item) {
return $scope.clicked ? 'active' : undefined;
};
}).
/**
* Frames controller
*/
controller('framesController', function($scope,framesModel){
$scope.data = [];
$scope.frames = framesModel;
});
Эта вещь работает в том смысле, что она фактически обновляет $scope и, следовательно, DOM, когда возвращается асинхронный вызов.
Но что мне нужно добиться, так это получить обратный вызов, когда асинхронная обработка завершится (возможно, с помощью $broadcast), чтобы уведомить контроллер фреймов, а затем получить контроль над возвращаемыми данными, чтобы я мог манипулировать ими перед обновлением $scope и, следовательно, ДОМ.
Помощь будет высоко оценена.
frames
, либо присвоить их какому-то другому свойству (например,manipulatedFrames
), которое будет использовать frameworkController. - person Mark Rajcok   schedule 08.08.2013