Angular CRUD,后端/数据库更改时的更新视图($ resource和REST)

时间:2014-11-24 21:05:16

标签: angularjs crud

我目前正在使用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子阵列何时更新。这似乎并没有更新视图中的数据(即使它在数据库中更新)。

关于做到这一点(以及如何做到这一点)的最佳方式的任何建议都会很棒!谢谢!

1 个答案:

答案 0 :(得分:1)

基本上按钮单击应该使用ng-click来执行一个函数并将项目传递给该函数。例如:

...ng-repeat="item in items"... <button type="button" ng-click="updateItem(item)">Update</button ...

然后在该功能中,您拥有要更新的确切项目。如果您使用的是$资源,那就是:

$scope.updateItem = function(item) { item.$update(...); };

除非我不理解你