角度相当新颖。我想使用angular的$ resource库来使用我们的API服务。我在删除通过query()方法获得的记录的正确方法上有点迷失。具体来说,我们有一个用户通知的端点。我们希望在页面加载时获取所有用户通知,使用ng-repeat循环结果并在导航栏中显示通知。当用户单击删除图标时,应删除相应的通知。这是我目前所拥有的代码的精简版本:
JS:
angular.module('myapp', ['ngResource']).factory('Notifications',function($resource){
return $resource('/apiv2/user/notifications/:id', {id:'@id'});
}).controller('NavigationController',['$scope','Notifications',function($scope, Notifications){
$scope.notifications = Notifications.query();
$scope.deleteNotification = function(notification){
notification.$delete();
};
}]);
HTML:
<ul>
<li ng-repeat="notification in notifications">
<i class="icon-remove" ng-click="deleteNotification(notification)"></i>
</li>
</ul>
使用此代码,当用户单击删除图标时,单个通知对象将传递给deleteNotification方法,并通过api从后端正确删除。到目前为止,一切都按预期工作。但是,如果我在事后看了$ scope.notifications对象,那么刚刚删除的通知仍然会包含损坏的数据:
{$ promise:undefined,$ resolved:true}
理想情况下,我希望从通过.query()方法返回的对象中擦除此记录,以反映其在后端的状态,而无需执行新的.query()。
任何帮助将不胜感激!我为模糊的描述和/或不完整/不准确的代码道歉,我在晚餐时通过我的手机键盘输入内存,所以天知道我是否错过了什么。
答案 0 :(得分:1)
更好的方式:(参见AngularJS ngResource delete event)
$scope.deleteNotification = function (index) {
$scope.notifications[index].$delete();
$scope.notifications.splice(index, 1);
}
并在您的标记中执行
ng-click="deleteNotification($index)"
可能有更好的方法来执行此操作,因为这会引发控制台错误(但仍然有效),但这就是我正在做的事情:
$scope.notifications = Notifications.query();
$scope.deleteNotification = function(notification){
notification.$delete();
$scope.notifications = $scope.notifications.filter( function(n)
return (n != notification);
}); // filter everything but
};
如果使用下划线,则可以使用更漂亮的方式来编写删除内容。