2014-07-09 66 views
4

我有休息角服務具有以下結構如何與承諾模式中使用restangular在角服務

function countrySvc(restangular) { 
    restangular.addResponseInterceptor(function (data, operation, what, url, response, deferred) { 

     if (operation === 'getList') { 
      var newResponse = response.data; 

      return newResponse; 
     } 
     return response; 
    }); 
    var baseCountry = restangular.all('country'); 


    this.countries = function() { 

     baseCountry.getList(); 

    }; 
} 

也是一個控制器

function countryCtrl(scope, countrySvc) { 


    scope.countries = countrySvc.countries(); 

} 

,但是當我從控制器訪問的國家,結果是空的與數據成功的請求,我的問題是如何可以從響應提取數據與適當的承諾模式,即(我需要國家時,我訪問scope.countries陣列)

回答

8

您需要解決的諾言......

有兩種方法可以做到這一點...

1)使用$object

只需添加.$object結束諾言所以一旦請求被做了做出決議的承諾...

scope.countries = countrySvc.countries().$object; 

2)使用then

如果你需要做一些東西后,承諾解決挑這個選項,一旦請求完成回調函數在then將被解僱

scope.countries = countrySvc.countries().then(function (response){ 
    // DO SOMETHING IF YOU NEED BEFORE SET OBJECT 
    scope.countries = response; 
    // DO SOMETHING IF YOU NEED AFTER SET OBJECT 
});