在Angular.js中,在下载完成后执行一些操作

时间:2013-07-19 08:23:06

标签: angularjs angularjs-scope

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

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

1 个答案:

答案 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);
});