1

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

    }
}]);

ありがとう

4

3 に答える 3

7

$resourceis ayn プロセスで、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

私はコメントしただろうが、担当者がいない. 私は同じ問題(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 に答える