角度等待资源删除响应更新列表?

时间:2013-11-20 16:04:38

标签: angularjs data-binding angularjs-scope angular-resource

我正在使用$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});

    }
}]);

由于

3 个答案:

答案 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(...);