我目前的角度做一个应用程序,它做到这一点:
(网页加载)制作的角度控制器的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