2014-03-06 94 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