2015-12-01 34 views
3

我是angularjs的新手。在創建了一些具有寧靜的Web服務的項目後,我在某個時間點卡住了。所以請幫助我解決這些問題。 我從AngularJs $resource vs $http

我的問題閱讀$resource$http之間的區別是,因爲我使用$resource數據來異步 例如如果我保存了任何數據並傳輸到詳細信息頁面,那麼我得到的數據不會更新,如果我等待一段時間,我將獲取新數據。

所以我需要去$http或有任何其他方式來同步呼叫。 我也嘗試與$promise但它不能解決我的問題。

+0

代碼?使用承諾應該是解決問題的可行方法。 – whipdancer

+0

我懷疑答案是做一個同步請求 - 你可以發佈你的代碼有問題嗎? – tymeJV

+0

你不需要同步數據,你的用戶界面將被卡住[已棄用](https://developer.mozilla.org/en-US/docs/Web/API/XMLHttpRequest#open())。 –

回答

4

這是我如何使用$資源

在控制器:

var promise = Service.queryItem(); 
    promise.then(function(response){ 

     // just adding my response items to an array 
     angular.forEach(response, function(item){ 
      $scope.items.push(item); 
     }); 

    }, function(reason){ 
     console.log(reason); 
}); 

在服務

this.queryItem = function(){ 

    var deferred = $q.defer(); 
    setTimeout(function() { 
     // deferred.notify('Saving data..'); 
     var items = Items.query({},function() { 
      deferred.resolve(items.d.results); 
     }, function(error){ 
      deferred.reject(error); 
     }); 
    }, 1000); 
    return deferred.promise; 
}; 

在$資源工廠:

// just a snippet from my factory 
query: { 
    method: 'GET', 
    headers: { "Accept": "application/json; odata=verbose" }, 
    url: "RequestURL" 
}, 

正如一些評論指出,使用promise將使其按照所需的順序運行,正如你所看到的那樣,我做了for each後.then