【问题标题】:Update scope after a resource delete资源删除后更新范围
【发布时间】:2014-04-20 01:26:11
【问题描述】:

我想在调用资源删除后更新$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;
            })
        });
    }

【问题讨论】:

    标签: angularjs


    【解决方案1】:

    不应该是:

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

    资源操作在其返回值中公开承诺,因此您不能直接在它们上调用 then()。

    【讨论】:

    • TypeError: 无法读取未定义的属性 'then'。在日志中,我可以看到 $promise 未定义。我仍然得到另一个例外。
    • 据我了解,您将 $promise 用于类语法 Group.query().$promise.then,但不用于实例语法 group.$query().then。我可能是错的。顺便说一句,它现在使用的是类语法,而不是实例语法。
    猜你喜欢
    • 1970-01-01
    • 2019-02-21
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-09-12
    • 2022-01-17
    • 2012-08-12
    • 1970-01-01
    相关资源
    最近更新 更多