通过Angular Resources服务读取JSON

如何使用angular resources.js通过服务读取JSON文件

我正在开发一个非常基本的Angular应用程序,用于测试目的,现在我正在尝试从JSON文件中读取数据。我将这段代码放在一个服务中,这样当我们移动一个基于服务器的数据存储时,我就可以更容易地将它替换掉

我的AppApp.controller声明如下:

“严格使用”;
//为自定义指令创建模块
var App=angular.module('App',['jsonService']);
//控制器业务逻辑
App.controller('AppCtrl',函数AppCtrl($scope,JsonService){
控制台日志(“标记1”);
if(!$scope.jsonData){
控制台日志(“标记2”);
getData(函数(d){
控制台日志(d);
$scope.jsonData=d;
$scope.records=d.length;
});
}否则{
log(“我已经有数据了…”+$scope.jsonData);
}
log($scope.jsonData);
});

目前,我的JsonService定义如下:

“严格使用”;
angular.module('jsonService',['ngResource']))
.factory('JsonService',函数($resource,$filter){
//使用Angular的$resource模块定义远程服务
var service=$resource('/data/processmodelingresources.json',{});
var JsonService={
//调用$resource.query()检索远程数据。
getData:函数getData(回调){
控制台日志(“标记3”);
服务查询(功能(数据){
控制台日志(“标记4”);
});
}
};
返回JsonService;
});

我得到的控制台输出如下:

标记1 app.js:8
marker 2 app.js:11
marker 3 services.js:13
未定义的app.js:21
类型错误:对象#<资源>没有方法“推”
抄袭(http://127.0.0.1:8000/lib/angular.js:556:21)
新资源(http://127.0.0.1:8000/lib/angular-参考资料:js:330:9)
在http://127.0.0.1:8000/lib/angular-参考资料:js:386:32
在弗雷赫(http://127.0.0.1:8000/lib/angular.js:117:20)
在http://127.0.0.1:8000/lib/angular-参考资料:js:385:19
在wrappedCallback(http://127.0.0.1:8000/lib/angular.js:6650:59)
在http://127.0.0.1:8000/lib/angular.js:6687:26
在Object.Scope.$eval(http://127.0.0.1:8000/lib/angular.js:7840:28)
位于Object.Scope.$digest(http://127.0.0.1:8000/lib/angular.js:7707:25)
在Object.Scope.$apply(http://127.0.0.1:8000/lib/angular.js:7926:24)www.js:5582

当我试图调用我的service.query(函数(数据){})时,我收到了我的错误,如果我理解正确的话,它应该是我的JSON文件

我一直在使用AngularJS Cats应用程序作为提取数据的示例

我会按照@pkozlowski的建议,确保响应是一个数组。无论如何,下面是一个从JSON文件加载数据的示例,与您在评论中描述的内容类似。它使用ngResource,可以帮助您将内容组合在一起:http://plnkr.co/edit/Ofq7Md8udEnIhAPF1NgL?p=preview

服务

角度.module(’jsonService’,[‘ngResource’])
.factory(’JsonService’,函数($resource){
返回$resource(’cats.json’,{}{
getData:{method:’GET’,isArray:false}
});
});

请注意,isArray设置为false

你的应用程序和控制器

var-app=angular.module('app',['jsonService']);
app.controller('ctrl',函数($scope,JsonService){
getData(函数(数据){
$scope.name=data.name;
$scope.children=data.children;
});
});

getData实际上是不需要的,因为资源类为您提供了一些有用的方便方法,例如get,您可以这样做

角度.module(’jsonService’,[‘ngResource’])
.factory(’JsonService’,函数($resource){
返回$resource(’cats.json’);
});
app.controller(’ctrl’,函数($scope,JsonService){
get(函数(数据){
$scope.name=data.name;
$scope.children=data.children;
});
});

发表评论