2014-03-06 93 views
0

我有一个Angular服务,它使用$ http获取json文件。角度控制器和http变量

App.factory('jsonFile', function($http) { 
    var promise; 
    var jsondata = { 
     get: function() { 
      if (!promise) { 
       var promise = $http.get('src/app_preprocess/data_json.js').success(function(response) { 
        return response.data; 
       }); 
       return promise; 
      } 
     } 
    }; 
    return jsondata; 
}); 

和控制器

App.controller('firstCtrl', function (jsonFile , $scope) { 
    jsonFile.get().then(function(d) { 
     $scope.header = d.data.PACKAGE.ITEM[0] 
    }) 
}); 

这种运作良好。

我的问题是为什么我不能将http的结果添加到变量而不是像这样的范围...?

App.controller('firstCtrl', function (jsonFile , $scope) { 
    var output; 
    output = jsonFile.get().then(function(d) { 
     return d.data.PACKAGE.ITEM 
    }); 
    $scope.header = output[0]; 
}); 

回答

1

因为jsonFile返回一个承诺,你尝试使用输出它返回之前。只有你可以放心的承诺会在预期的时间返回then子句中。在它之外 - 你现在不能由于http调用的异步性质。

可以在角here

+0

感谢那些非常有意义 – user3387010

+0

@ user3387010阅读更多有关承诺,如果这个回答你的问题,请接受答案 – alonisser