我目前的角度做一個應用程序,它做到這一點:
(網頁加載)製作的角度控制器的API調用(對Symfony2的終點)得到:items
。
$scope.items = ItemsService.query(function(data){
$scope.loading = false;
}, function(err){
$scope.loading = false;
});
items
是含有許多item
對象陣列。 每個item
包含參數例如item.param1
item.param2
。
我建立它以類似的方式,以本教程: http://www.sitepoint.com/creating-crud-app-minutes-angulars-resource/ 即角控制器調用它調用(Symfony2的)後端API端點的服務。 端點傳回從數據庫獲取的items
。然後使用ng-repeat將項目放入視圖(item in items
)。
這一切工作正常。
現在,我有一個按鈕(在ng-repeat中),它有效地導致對另一個symfony2端點的PUT請求,從而更新數據庫中的item.param1
。這也發生在我鏈接到的教程中。
問題是(在我的應用程序和教程中)我不得不再次進行api調用,它會更新所有項目,以便查看更改。 我想只更新視圖中的數據(立即)爲一個對象,而不必再次獲取它們。 即是這樣的:
$scope.items[4] = Items.get({id: item.id}, function(){});
除了應用陣列關鍵是不知道,所以我不能做到這一點。 (所以像:?$scope.items.findTheOriginalItem(item) = Items.get({id: item.id}, function(){});
另一種可能的解決方案(這似乎是它可能是最好的),我已經在這裏看了: http://teropa.info/blog/2014/01/26/the-three-watch-depths-of-angularjs.html ,並試圖做平等$表:$scope.$watch(…, …, true);
因此,使用的手錶看當item
子陣列被更新時,雖然它看起來沒有更新視圖中的數據(儘管它正在數據庫中更新)
任何有關這樣做的最佳方法的建議(以及如何做到這一點)將是偉大的!謝謝!
如果你知道什麼是對你的項目改變爲什麼你需要在提出的要求服務器?只需更新視圖(因爲無論如何你都會更新服務器,你會保持一致我猜) – 2014-11-24 21:14:52
我需要向服務器發出請求,以便服務器可以更新數據庫! 問題是,當數據庫更新時,它不會立即反映在視圖中(這就是爲什麼我需要再次調用重新獲取項目(最好不要進行此調用,只是反映在視圖中,因爲正確的數據已經存在)) – timhc22 2014-11-24 22:31:27
您是否在更改後嘗試使用'scope.digest()'? – 2014-11-24 22:33:15