Bir hizmet aracılığıyla bir JSON dosyasında okumak için angular-resources.js
'u nasıl kullanabilirim?Açısal Kaynaklar Hizmetiyle JSON'ta Okuma
Test amacıyla çok basit bir Angular uygulamasında çalışıyorum ve şu an sadece JSON dosyasındaki verileri okumaya çalışıyorum. Bu kodu bir hizmete yerleştiriyorum, böylece sunucu tabanlı bir veri deposunu hareket ettirdiğimizde daha kolay bir şekilde değiştirebiliyorum. aşağıdaki gibi
Benim App
ve App.controller
beyan şunlardır:
'use strict';
// create module for custom directives
var App = angular.module('App', ['jsonService']);
// controller business logic
App.controller('AppCtrl', function AppCtrl($scope, JsonService) {
console.log("marker 1");
if (!$scope.jsonData) {
console.log("marker 2");
JsonService.getData(function (d) {
console.log(d);
$scope.jsonData = d;
$scope.records = d.length;
});
} else {
console.log("I have data already... " + $scope.jsonData);
}
console.log($scope.jsonData);
});
Benim JsonService
anda, aşağıdaki gibi tanımlanır:
'use strict';
angular.module('jsonService', ['ngResource'])
.factory('JsonService', function($resource, $filter) {
// define the remote service using Angular's $resource module
var service = $resource('/data/ProcessModeling-Resources.json', {});
var JsonService = {
// calls $resource.query() to retrieve the remote data.
getData : function getData(callback) {
console.log("marker 3");
service.query(function (data) {
console.log("marker 4");
});
}
};
return JsonService;
});
alıyorum konsol çıktısı aşağıdaki gibidir:
marker 1 app.js:8
marker 2 app.js:11
marker 3 services.js:13
undefined app.js:21
TypeError: Object #<Resource> has no method 'push'
at copy (http://127.0.0.1:8000/lib/angular.js:556:21)
at new Resource (http://127.0.0.1:8000/lib/angular-resource.js:330:9)
at http://127.0.0.1:8000/lib/angular-resource.js:386:32
at forEach (http://127.0.0.1:8000/lib/angular.js:117:20)
at http://127.0.0.1:8000/lib/angular-resource.js:385:19
at wrappedCallback (http://127.0.0.1:8000/lib/angular.js:6650:59)
at http://127.0.0.1:8000/lib/angular.js:6687:26
at Object.Scope.$eval (http://127.0.0.1:8000/lib/angular.js:7840:28)
at Object.Scope.$digest (http://127.0.0.1:8000/lib/angular.js:7707:25)
at Object.Scope.$apply (http://127.0.0.1:8000/lib/angular.js:7926:24) angular.js:5582
Hata yaptığımda hata alıyorum
numaralı veriyi çekerken kullanacağım service.query(function (data) { }
numaralı çağrıyı (doğru bir şekilde anladığım halde) çağırmam gerekir.
dosyanızdaki veriler, query() yönteminin gerektirdiği bir dizi değil. –
'data' bir' object' dir. İki alanı vardır: {'name': 'Resources', 'children': [...]}. Orada bir dizi var ... bu benim acıma neden olacak mı? –
Evet, yanıtın bir nesneye sarılmamış bir dizi, üst düzey olması gerekir. –