【发布时间】:2012-11-30 18:08:28
【问题描述】:
如何使用angular-resources.js 通过服务读取 JSON 文件?
我正在开发一个非常基本的 Angular 应用程序以用于测试目的,并且现在正试图从 JSON 文件中读取数据。我将此代码放在服务中,以便在移动基于服务器的数据存储时更轻松地将其换出。
我的App和App.controller声明如下:
'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);
});
我的JsonService目前定义如下:
'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;
});
我得到的控制台输出如下:
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
当我尝试调用我的service.query(function (data) { } 时收到错误消息,这(如果我理解正确的话)应该是拉入我的 JSON 文件。
我一直使用AngularJS Cats App 作为拉取数据的示例。
【问题讨论】:
-
我推测你文件中的数据不是query()方法要求的数组。
-
data是一个object。它有两个字段:{'name': 'Resources', 'children': [ ... ] }。里面有一个数组……那会引起我的痛苦吗? -
是的,响应需要是一个顶级数组,而不是包裹在对象中。
标签: javascript json angularjs