0

我有这个工厂,它下载一些 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. 

下载数据并将其添加到范围后,我需要执行大量操作。下载数据后,在控制器中执行一系列操作的正确方法是什么。

4

1 回答 1

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);
});
于 2013-07-19T08:35:32.433 回答