我是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调用获取它。我希望我有一些道理,我是新手,到目前为止,我已经能够通过测试或搜索来解决我的问题。
答案 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数据上的一些操作相结合,但也许你可以将一家工厂注入另一家工厂?