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

Mar*_*rez 1 data-binding angularjs angular-resource angularjs-scope

我正在使用$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'} }
        }
    )
});
Run Code Online (Sandbox Code Playgroud)

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});

    }
}]);
Run Code Online (Sandbox Code Playgroud)

谢谢

Max*_*tin 7

$resource是ASYN处理,并返回承诺1.

从您的代码:

IndustrialistFactory.delete({id: id, industrialistId: industrialistId  });

$scope.industrialists= IndustrialistsFactory.query({},{id: id});
Run Code Online (Sandbox Code Playgroud)

您尝试删除元素并在加载新对象后立即删除.

尝试$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);
     }
  )
Run Code Online (Sandbox Code Playgroud)

什么是承诺:1

promise表示未来值,通常是异步操作的未来结果,并允许我们定义一旦该值可用或发生错误时将发生什么.