在我的主app控制器中,我调用了这个async方法,它在完成后广播一个事件(loadData)。在事件处理程序中,我将一些数据加载到我的$ scope.layers数组中。但我认为没有任何内容。
事件正在被触发,数据被填充到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函数并且我的不同UI组件能够响应。不确定我是否可以通过承诺得到这个。
我找到了this link并且它正在为他工作,所以我无法理解为什么它不适合我...