angularjs $ resource service TypeError:undefined不是函数

时间:2015-03-15 16:23:00

标签: json angularjs resources

我是AngularJS的新手,我觉得修理这个很可能非常简单,我会感到非常愚蠢,但我已经尝试过这个/寻找几个小时了。我知道问题的来源,但我不确定如何解决它。

我让一切工作正常,然后我在后端进行了修改,让查询调用返回其他数据。我已尝试使用默认的query()方法,并在$ resource服务中配置了一个新的自定义方法,并使用transformResponse。

.factory('apiEntry', function($resource, apiUrl) {
  return { 
   api: function(url) {
    return $resource(apiUrl + url + "/:id", { id: "@id" },
        { create: { method: "POST" }, save: { method: "PUT" },
         saveBulk: { method: "PUT", isArray: true }, queryAll: { method: "GET", 
         transformResponse: function(data, headers) {
            var data = angular.fromJson(data);
            return { data: data[0], counter: data[1], stats: data[2] }
         } }

 }
}
})

然后

$scope.dataRest = $scope.dataResource.queryAll();

查询它,返回数据并解析承诺可以正常工作。我可以用dataRest.data等填充视图。但是在它上面调用$ save()或$ delete()会给我这个错误。

例如:

$scope.deleteItem = function(item) {
        console.log(item);
        item.$delete().then(function() {
            $scope.dataRest.data.splice($scope.dataRest.data.indexOf(item), 1);
        });
    }

错误:

TypeError: undefined is not a function

我不确定Angularjs预期的数据结构到底是什么。目前,资源对象是保存原始数据的属性的对象。我不太确定如何从这里开始。如果可能的话,我认为最好的是在Angularjs中处理它。我还可以尝试在返回响应之前在后端重新格式化它,或者通过单独的API调用获取它。我希望我有一些道理,我是新手,到目前为止,我已经能够通过测试或搜索来解决我的问题。

1 个答案:

答案 0 :(得分:0)

在你的工厂里,我看到的方法很少,但没有一个被命名为delete?我还没有使用$运算符,所以也许你这样做是正确的。我将粘贴一个有效的代码示例。

(function () {
'use strict';

angular
    .module('API')
        .factory('Factory', function ($resource) {
            return $resource("/REST ROUTE", {},
                {                   
                    save: {
                        method: "POST",
                        cache: true,
                        isArray: false
                    }
                }
            );
        });
})();

我总是尝试将api分成小部分,所以你必须将一个工厂注入控制器并像这样使用它

$scope.Function = function(){
    Factory.save({user:user});
}

如果你想添加更多功能我建议在控制器功能中使用它,或者如果你需要在很少的地方使用它,那么我只是从工厂返回功能但是没有将它与REST数据上的一些操作相结合,但也许你可以将一家工厂注入另一家工厂?