我目前正在使用angular进行应用程序:
(在页面加载时)在角度控制器(到symfony2终点)进行api调用,得到: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中)有效地导致PUT请求(另一个symfony2端点),从而更新数据库中的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
并尝试做平等$ watch:$scope.$watch(…, …, true);
。因此,使用watch来查看item
子阵列何时更新。这似乎并没有更新视图中的数据(即使它在数据库中更新)。
关于做到这一点(以及如何做到这一点)的最佳方式的任何建议都会很棒!谢谢!
答案 0 :(得分:1)
基本上按钮单击应该使用ng-click
来执行一个函数并将项目传递给该函数。例如:
...ng-repeat="item in items"...
<button type="button" ng-click="updateItem(item)">Update</button
...
然后在该功能中,您拥有要更新的确切项目。如果您使用的是$资源,那就是:
$scope.updateItem = function(item) { item.$update(...); };
除非我不理解你