2014-03-04 122 views
1

我們的API包含一組端點,包括一組設置(如默認文本,其他端點等)。我們的前端是用AngularJS編寫的,我們試圖找出把它們還給客戶端的最好方法,並使它們在應用程序中的所有指令中都可用。現在我們最好的解決辦法是包括settings作爲指令:AngularJS從服務器下載設置

angular.module('ourapp') 
    .factory('settings', function ($http) { 
     var url = 'http://localhost:8080/settings'; 
     return function (callback){ 
      $http.get(url).success(callback); 
     }; 
    }); 

但其它所有的呼叫都異步包裹。

有沒有更好的方法來做到這一點?

+0

你找到一個解決這個問題? – Mikke

+0

我們最終做了一個角度外的同步XHTTP調用,並將結果綁定到角度全局設置對象。 – Jason

回答

0

由於設置與服務器是異步的,因此它們的可用性本質上是異步的。如果你的邏輯取決於可用的設置,那麼可能沒有比使用promise更好的解決方案。

angular.module('ourapp').factory('settings', function($http) { 
    var url = 'http://localhost:8080/settings'; 
    return $http.get(url); // returns a promise 
}); 

你可以使用$route解決實例控制器之前的承諾。這些設置將在控制器中同步提供。

您也可以模擬承諾解包,即立即(同步)返回一個對象,稍後將填充真實數據。這對範圍和模板非常有用,並且以前是Angular本身的一個特性。請注意,如果不謹慎使用模擬承諾解包,可能會導致錯誤,因爲設置數據可能存在也可能不存在。

例子:

angular.module('ourapp').factory('settings', function($http) { 
    var url = 'http://localhost:8080/settings'; 
    var settings = {}; 
    $http.get(url).success(function(data) { 
     angular.extend(settings, data); // fills in data from server 
    }); 
    return settings; // immediately (synchronously) returned 
});