资源删除后更新范围

时间:2014-04-19 13:24:56

标签: angularjs

我想在调用资源删除后更新$scope。资源定义为

meanApp.factory('Group', function ($resource) {
    return $resource('/api/v1/groups/:groupId', {groupId: '@_id'}, {
        update: { method: 'PATCH'}
    });
});

ui-router控制器:

resolve: {
    groups: ['Group', function (Group) {
        return Group.query();
    }
    ]
},
controller: function ($scope, groups) {
    $scope.myData = groups;

    $scope.deleteGroup = function (group) {
        group.$delete(function(data){
            group.$query().then(function(data) {
                $scope.groups = data;
            })
        });
    }
}

删除工作正常,删除回调中的$query也会被调用,返回正确的结果。但后来我得到一个例外,范围没有刷新。

TypeError: undefined is not a function
    at http://www.example.com:3000/lib/angular-resource.js:487:47
    at Array.forEach (native)
    at forEach (http://www.example.com:3000/lib/angular.js:309:21)
    at $http.then.value.$resolved (http://www.example.com:3000/lib/angular-resource.js:486:37)

角度资源代码问题似乎是值未定义

if (action.isArray) {
    value.length = 0;
    forEach(data, function (item) {
        value.push(new Resource(item));
    });

修改

如果我使用类语法而不是实例语法,它可以工作:

    $scope.deleteGroup = function (group) {
        group.$delete(function(data){
            Group.query().$promise.then(function(data) {
                $scope.groups = data;
            })
        });
    }

1 个答案:

答案 0 :(得分:0)

不应该是:

    group.$delete(function(data){
        group.$query().$promise.then(function(data) {
            $scope.groups = data;
        })
    });

资源操作会在其返回值中公开promise,因此您无法直接在它们上调用then()。