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 に答える