我正在使用$resource
添加/删除列表。问题是删除后我仍然看到有时删除元素。
我如何解决它?
这是代码:
services.js
var services = angular.module('cliConsApp.services', ['ngResource']);
services.factory('IndustrialistsFactory', function ($resource) {
return $resource(
'/app_dev.php/api/v1/constructionprivateinformations/:id/industrialists',
{id: '@id'},
{
query: { method: 'GET', isArray: true },
create: { method: 'POST'}
}
)
});
services.factory('IndustrialistFactory', function ($resource) {
return $resource(
'/app_dev.php/api/v1/constructionprivateinformations/:id/industrialists/:industrialistId',
{id: '@id', industrialistId:'@industrialistId'},
{
delete: { method: 'DELETE', params: {id: '@id'} }
}
)
});
controllers.js
app.controller('industrialistCtrl', ['$scope', 'IndustrialistsFactory', 'IndustrialistFactory',
function ($scope, IndustrialistsFactory, IndustrialistFactory) {
$scope.createNewUser = function (id) {
IndustrialistsFactory.create({id: id},$scope.industrialist);
$scope.industrialists= IndustrialistsFactory.query({},{id: id });
}
$scope.deleteUser = function (industrialistId, id) {
IndustrialistFactory.delete({id: id, industrialistId: industrialistId });
$scope.industrialists= IndustrialistsFactory.query({},{id: id});
}
$scope.init = function (id) {
$scope.id=id;
$scope.industrialists= IndustrialistsFactory.query({id: $scope.id});
}
}]);
由于
答案 0 :(得分:7)
$resource
是asyn进程并返回 promise 1 。
从你的代码:
IndustrialistFactory.delete({id: id, industrialistId: industrialistId });
$scope.industrialists= IndustrialistsFactory.query({},{id: id});
您尝试删除元素并在加载新对象后立即删除。
尝试在回调后删除该元素后再运行$scope.industrialists= IndustrialistsFactory.query({},{id: id});
。
应该是这样的:
IndustrialistFactory.delete({id: id, industrialistId: industrialistId }).
.$promise.then(
//success
function( value ){
$scope.industrialists= IndustrialistsFactory.query({},{id: id});
},
//error
function( error ){
alert(error);
}
)
什么是承诺: 1
承诺代表未来的价值,通常是未来的结果 一个异步操作,并允许我们定义什么 一旦这个值可用,或者当一个值出现时,就会发生 发生错误。
答案 1 :(得分:0)
在尝试再次查询服务器之前,您需要等待删除承诺解决。
$scope.deleteUser = function (industrialistId, id) {
IndustrialistFactory.delete({id: id, industrialistId: industrialistId })
.$then(function(response){
$scope.industrialists= IndustrialistsFactory.query({},{id: id});
},function(response){
//something went wrong...
});
};
答案 2 :(得分:0)
我会评论,但没有代表。只是想指出我遇到了同样的问题(ang v1.2.6),但意识到这是因为我在做:
//bad
var obj = IndustrialistFactory({...});
obj.$delete().$promise.then(...);
而不是它需要的东西(在资源本身上)
//good
var obj = IndustrialistFactory({...});
IndustrialistFactory.delete({id:obj.id}).$promise.then(...);