1

$resource用来添加/删除列表。问题是删除后我仍然看到有时删除的元素。

我该如何解决?

这是代码:

服务.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'} }
        }
    )
});

控制器.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});

    }
}]);

谢谢

4

3 回答 3

7

is async$resource进程并返回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

Promise 代表一个未来值,通常是异步操作的未来结果,并允许我们定义一旦该值可用或发生错误时会发生什么。

于 2013-11-20T16:12:16.383 回答
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...
         });
};
于 2013-11-20T16:13:22.720 回答
0

我会发表评论,但没有代表。只是想指出我遇到了同样的问题(ang v1.2.6)但意识到这是因为我在做:

//bad
var obj = IndustrialistFactory({...});
obj.$delete().$promise.then(...);

而不是它需要的(在资源本身上)

//good
var obj = IndustrialistFactory({...});
IndustrialistFactory.delete({id:obj.id}).$promise.then(...);
于 2014-01-28T00:57:07.563 回答