更新2
我从0.6.1升级到1.0.9修复了这个问题 . 似乎认为版本0.8.7和0.8.8中有两个修复工具需要它们才能完成 . 在0.8.7中,它确实调用了reourceExtractor,但仍然出现错误:
错误:$ . 在beginPhase(http://ajax.googleapis.com/ajax/libs/angularjs/1.0.7/angular.js:8334:15)的Error()处正在进行$ digest . $ get.Scope . $ apply(http://ajax.googleapis.com/ajax/libs/angularjs/1.0.7/angular.js:8136:11)在HTMLDivElement.ngEventDirectives . (匿名函数)(http://ajax.googleapis . com / ajax / libs / angularjs / 1.0.7 / angular.js:12986:17)在event.preventDefault(http://ajax.googleapis.com/ajax/libs/angularjs/1.0.7/angular.js:1992 :10)在forHach的Array.forEach(native)(http://ajax.googleapis.com/ajax/libs/angularjs/1.0.7/angular.js:130:11)在eventHandler(http:// ajax . googleapis.com/ajax/libs/angularjs/1.0.7/angular.js:1991:5)HTMLDivElement.forEach.bind.events . (匿名函数)(http://ajax.googleapis.com/ajax/libs/在event.preventDefault上的angularjs / 1.0.7 / angular.js:2067:15)(http://ajax.googleapis.com/ajax/libs/angularjs/1.0.7/angular.js:1992:10)
然而0.8.8似乎已经清除了所有这一切 . 我将继续四处寻找,看看是否还有其他奇怪之处 .
我不知道我是如何得到这样一个旧版本的restangular .
更新:
所以通过javascript追踪
angular-resource.js::ResourceFactory
被称为成功变量的是匿名函数
restangular.js::fetchFunction
responseExtractor是我在我的应用程序中设置的功能 . 所以这一切看起来都不错???在
angular-resource.js::ResourceFactory
进行REST调用,数据变量包含正确的REST响应 . 它在同一个功能中分崩离析:
if (data) {
if (action.isArray) {
value.length = 0;
forEach(data, function(item) {
value.push(new Resource(item));
});
} else {
copy(data, value);
}
}
错误发生在@ value.push(new Resource(item));其中value本质上是JSON rest响应 .
我读到角度资源需要你定义其余的资源和响应,定义的一部分是定义数组部分 . 我不知道这是否是根本原因 - 但我认为restangular为我照顾了这一点 . 还有更多要挖掘的事情 . 任何帮助都是 - 仍然感激 .
谢谢
所以我同时学习Angular和Django . 我已经使用Django rest服务来构建一个返回一些简单JSON的服务 . 那部分工作正常,但我似乎无法将它与/ restangular联系起来 . REST调用正在发生,并且正在返回json - 但似乎没有调用responseExtractor . 我一直在坐立不安,似乎无法把手指放在上面 .
先感谢您
添加调用堆栈:
TypeError:对象#在U(http://ajax.googleapis.com/ajax/libs/angularjs/1.0.7/angular.min.js:10:257)的新资源中没有方法'push'(http: //ajax.googleapis.com/ajax/libs/angularjs/1.0.7/angular-resource.js:350:9)http://ajax.googleapis.com/ajax/libs/angularjs/1.0.7/angular -resource.js:407:32 at m(http://ajax.googleapis.com/ajax/libs/angularjs/1.0.7/angular.min.js:6:494)位于http://ajax.googleapis . com / ajax / libs / angularjs / 1.0.7 / angular-resource.js:406:19 at h(http://ajax.googleapis.com/ajax/libs/angularjs/1.0.7/angular.min.js: 78:33)在Object.e . 上的http://ajax.googleapis.com/ajax/libs/angularjs/1.0.7/angular.min.js:78:266 . $ eval(http://ajax.googleapis . com / ajax / libs / angularjs / 1.0.7 / angular.min.js:88:347)at Object.e . $ digest(http://ajax.googleapis.com/ajax/libs/angularjs/1.0.7/ angular.emin.js:86:198)at Object.e . $ apply(http://ajax.googleapis.com/ajax/libs/angularjs/1.0.7/angular.min.js:88:506)
非最小堆栈
TypeError:对象#在新资源(http://ajax.googleapis.com/ajax/libs/angularjs/1.0.7/angular.js:593:21)上没有方法'push'(http:// ajax.googleapis.com/ajax/libs/angularjs/1.0.7/angular-resource.js:350:9)在angular.module.factory.Resource . (匿名函数)(http://ajax.googleapis.com/ atEach的ajax / libs / angularjs / 1.0.7 / angular-resource.js:407:32)(http://ajax.googleapis.com/ajax/libs/angularjs/1.0.7/angular.js:137:20 )在deferred.promise的angular.module.factory.Resource . (匿名函数)(http://ajax.googleapis.com/ajax/libs/angularjs/1.0.7/angular-resource.js:406:19) . then.wrappedCallback(http://ajax.googleapis.com/ajax/libs/angularjs/1.0.7/angular.js:6846:59)在ref.then(http://ajax.googleapis.com/ajax/libs /angularjs/1.0.7/angular.js:6883:26)atObject . $ get.Scope . $ eval(http://ajax.googleapis.com/ajax/libs/angularjs/1.0.7/angular.js:8057:28)at Object . $ get.Scope . $ digest(http ://ajax.googleapis.com/ajax/libs/angularjs/1.0.7/angular.js:7922:25)at Object . $ get.Scope . $ apply(http://ajax.googleapis.com/ajax/库/ angularjs / 1.0.7 / angular.js:8143:24)
查看代码,responseExtractor方法存储在变量“a”中,我在堆栈中看不到 .
JSON
{
"count": 2
, "next": null
, "previous": null
, "results": [{"file": "tb.png", "caption": "dfsdffs", "id": 1}
, {"file": "tannin_tasting.jpg", "caption": "tannin tasting", "id": 2}
]
}
Javascript(编辑:sza提到的固定剪切粘贴错误)
angular.module('spaceJam', ['ui.bootstrap', 'restangular'])
.config(function(RestangularProvider) {
RestangularProvider.setResponseExtractor(function(response, operation) {
alert('here')
if (operation === "getList") {
var newResponse = response.results;
newResponse._resultmeta = {
"count": response.count,
"next": response.next,
"previous": response.previous
};
return newResponse;
}
return response;
});
});
var CarouselCtrl = function ($scope, Restangular) {
Restangular.all('images/?format=json').getList().then(function(images) {
alert(1)
$scope.items = images;
});
$scope.myInterval = 3000;
$scope.template = "/resources/angularViews/carousel.html"
var slides = $scope.slides = [
{'type': 'image', 'name': '/resources/img/pinot_noir_glass.jpg'}
, {'type': 'image', 'name': '/resources/img/toast1.jpg'}
, {'type': 'image', 'name': '/resources/img/vinyard1.jpg'}
, {'type': 'image', 'name': '/resources/img/tannin_tasting.jpg'}
]
}
2 回答
基本上你遇到了这个问题,因为Restangular正在使用下面的$ resource . 从版本0.8.7和0.8.8开始,我放弃了$ resource并开始使用$ http,因为$ resource带来了很多问题 . 曾经是他们面对的那个 .
如果您发现任何其他问题,请在Github上添加一个问题 .
谢谢!
看原帖 . 升级解决了这个问题 .