В моем основном контроллере приложения я вызываю этот асинхронный метод, который передает событие по завершении (loadData). В обработчике событий я загружаю некоторые данные в свой массив $scope.layers. Но на мой взгляд ничего не показано.
Событие запускается, и данные заносятся в массив слоев.
Это вид:
<div ng-repeat="layer in layers track by $index">
<span>{{layer.name}}</span>
</div>
это мой контроллер
app.controller('MainPanelCtrl',['$scope', 'myService', function($scope, myService){
'use strict';
myService.loadData();
$scope.$on('loadDoneEvent', function () {
$scope.layers = myService.getLayers();
//$scope.$apply() // why when adding this its working?
});}]);
Это сервис:
app.factory('myService', ['$rootScope', '$http', function ($rootScope, $http) {
'use strict';
var data;
var loadData = function (compId) {
$http.get("someUrl").then(function (response) {
data = response.data;
$rootScope.$broadcast('loadDoneEvent');
});
};
return {
loadData : loadData
};
}]);
Я просто не могу понять, чего мне здесь не хватает...
Я знаю, что могу использовать обещания, и это сработает. Но я хочу иметь возможность вызывать эту функцию loadData более одного раза и чтобы мои различные компоненты пользовательского интерфейса реагировали. Не уверен, что смогу получить это обещаниями.
Я нашел эту ссылку и у него это работает, так что я просто не могу понять, почему это не работает у меня...
$scope.$broadcast
или$scope.$emit
в том, что вы показали. - person Jon Black   schedule 08.03.2017