我有这个工厂下载一些JSON数据并将其添加到$ scope。
myApp.factory('loadDataService', function ($rootScope, $http) {
var loadDataService = {};
loadDataService.data = {};
loadDataService.getData = function () {
$http.get('/static/data.json')
.success(function (data) {
console.log("download finish");
loadDataService.data = data;
});
return loadDataService.data;
};
return loadDataService;
});
我从我的主控制器调用下载服务,如下所示:
$scope.data = loadDataService.getData();
// if I access the $scope.data here I get and exception because
// the data is not yet downloaded.
下载数据并添加到范围后,我需要做一堆操作。下载数据后,在控制器中执行大量操作的正确方法是什么。
答案 0 :(得分:4)
在getData
中提供一个回调函数,如下所示:
您的工厂
loadDataService.getData = function (callback) {
$http.get('/static/data.json')
.success(function (data) {
console.log("download finish");
loadDataService.data = data;
callback();
});
return loadDataService.data;
};
您的控制器
$scope.someOperations = function() {
// Your operations
};
$scope.data = loadDataService.getData($scope.someOperations);
您还可以loaded
使用$rootScope
这样的事件:
$rootScope.$on('data:loaded', function(e, data) {
deferred.resolve(data);
});