更新 2
問題を修正した 0.6.1 から 1.0.9 にアップグレードしました。バージョン 0.8.7 と 0.8.8 には、この作業を行うために必要な 2 つの修正があったようです。0.8.7 では、reourceExtractor を呼び出しますが、このトレースでエラーが発生します。
エラー: $digestは Object.$get.Scopeの beginPhase ( http://ajax.googleapis.com/ajax/libs/angularjs/1.0.7/angular.js:8334:15 ) の Error () で既に進行中です。 $apply ( http://ajax.googleapis.com/ajax/libs/angularjs/1.0.7/angular.js:8136:11 ) at 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 ) Array.forEach (ネイティブ) で forEach ( 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/angularjs/1.0.7/angular.js:2067:15 ) event.preventDefault ( 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)); ここで、値は基本的に JSON 残りの応答です。
角度リソースでは、残りのリソースと応答を定義する必要があり、定義の一部が配列部分を定義していることを読みました。それが根本的な原因であるかどうかはわかりませんが、restangular がそれを処理してくれると思いました。やるべきことはまだまだあります。どんな助けでも - まだ - 感謝しています。
どうも
だから私はAngularとDjangoを同時に学んでいます。Django レスト サービスを使用して、単純な JSON を返すサービスを構築しました。その部分は正常に機能していますが、/restangular に接続できないようです。REST 呼び出しが発生しており、json が返されていますが、responseExtractor が呼び出されていないようです。私はそわそわしていて、指を置くことができないようです。
前もって感謝します
コールスタックの追加:
TypeError: Object # has no method 'push' at U ( http://ajax.googleapis.com/ajax/libs/angularjs/1.0.7/angular.min.js:10:257 ) at new Resource ( 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 ) at 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 ) http://ajax.googleapis.com/ajax/libs/angularjs/1.0.7/angular.min.js:78:266 Object.e.$eval ( http://ajax.googleapis.com/ajax/libs/angularjs/1.0.7/angular.min.js:88:347 ) で Object.e.$digest ( http:// ajax.googleapis.com/ajax/libs/angularjs/1.0.7/angular.min.js:86:198 ) Object.e.$apply ( http://ajax.googleapis.com/ajax/libs/angularjs/ ) 1.0.7/angular.min.js:88:506 )
非最小スタック
TypeError: Object # has no method 'push' at copy ( http://ajax.googleapis.com/ajax/libs/angularjs/1.0.7/angular.js:593:21 ) at new Resource ( http://ajax ) .googleapis.com/ajax/libs/angularjs/1.0.7/angular-resource.js:350:9 ) angular.module.factory.Resource.(匿名関数) ( http://ajax.googleapis.com/ajax ) /libs/angularjs/1.0.7/angular-resource.js:407:32 ) forEach ( http://ajax.googleapis.com/ajax/libs/angularjs/1.0.7/angular.js:137:20 ) angular.module.factory.Resource.(匿名関数) ( http://ajax.googleapis.com/ajax/libs/angularjs/1.0.7/angular-resource.js:406:19 )で deferred.promise.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 ) Object.$get.Scope.$eval で ( http://ajax.googleapis.com/ajax/libs/angularjs/1.0.7/angular.js:8057:28 ) Object.$get.Scope.$digest ( http://ajax.googleapis.com/ajax/libs/angularjs/1.0.7/angular.js:7922:25 ) で Object.$get.Scope.$apply ( http://ajax.googleapis.com/ajax/libs/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'}
]
}