Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/angularjs/23.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
AngularJS:具有异步请求的多个依赖服务_Angularjs_Asynchronous_Angular Promise_Angular Services_Ngresource - Fatal编程技术网

AngularJS:具有异步请求的多个依赖服务

AngularJS:具有异步请求的多个依赖服务,angularjs,asynchronous,angular-promise,angular-services,ngresource,Angularjs,Asynchronous,Angular Promise,Angular Services,Ngresource,我想建立一个角度应用程序,主要用于显示数据,但在一个稍微动态的方式。我有多个JSON文件,结构相同,但内容不同,每种语言一个: res/information\u en.json [ { “名称”:“作业”, “数据”:[ { “头衔”:“头衔”, “雇主”:“雇主”, “说明”:“说明”, “开始”:“2015-12年”, “结束”:“2016-12” } ] },{ “姓名”:“个人”, “数据”:[ { “名字”:“基督徒”, “姓氏”:“施泰因迈尔” } ] } ] 德文版: res/

我想建立一个角度应用程序,主要用于显示数据,但在一个稍微动态的方式。我有多个JSON文件,结构相同,但内容不同,每种语言一个:

res/information\u en.json
[
{
“名称”:“作业”,
“数据”:[
{
“头衔”:“头衔”,
“雇主”:“雇主”,
“说明”:“说明”,
“开始”:“2015-12年”,
“结束”:“2016-12”
}
]
},{
“姓名”:“个人”,
“数据”:[
{
“名字”:“基督徒”,
“姓氏”:“施泰因迈尔”
}
]
}
]
德文版:

res/information\u de.json
[
{
“名称”:“作业”,
“数据”:[
{
“头衔”:“头衔”,
“雇主”:“Arbeigeber”,
“描述”:“Beschreibung”,
“开始”:“2015-12年”,
“结束”:“2016-12”
}
]
},{
“姓名”:“个人”,
“数据”:[
{
“名字”:“基督徒”,
“姓氏”:“施泰因迈尔”
}
]
}
]
此外,我还有另一个JSON文件,用于跟踪所有语言:

res/languages.json
[
{
“名称”:“英语”,
“短”:“恩”,
“活动”:真
},{
“名称”:“德国”,
“短”:“德”,
“活动”:错误
}
]
本质上,我希望用户能够选择语言,信息应该显示在可用语言中,由
res/languages.json
提供。为此,我创建了第一个服务:

app/services/language-service.js
(函数(){
"严格使用",;
角度.module('gulpAngularCv').factory('LanguageService',LanguageService);
/**@ngInject*/
函数语言服务($log、$q、$resource、toastr){
var服务={};
service.getLanguages=getLanguages;
service.select=select;
service.getActiveLanguage=getActiveLanguage;
var=false;
var语言=[];
函数getLanguages(){
如果(已初始化){
返回语言;
}否则{
初始化(),然后(
功能成功(结果){
angular.forEach(结果,函数addLanguage(语言){
语言。推送(语言);
})
初始化=真;
},功能失败(拒绝){
$log.error(“加载'res/languages.json'失败”);
$log.error(拒绝);
toastr.error('确保格式正确','加载语言文件失败!');
}
);
返回语言;
}
}
函数初始化(){
var deferred=$q.deferred();
$resource('res/languages.json')。查询(
功能成功(结果){
延迟。解决(结果);
},功能失败(拒绝){
延期。拒绝(拒绝);
}
);
回报。承诺;
}
功能选择(语言){
//迭代所有语言
//停用(如果激活)和激活(如果等于参数
}
函数getActiveLanguage(){
for(var i=0;i
当从控制器调用时,它本身就像一个符咒。但是正如我所说的,我也希望能够从相应的json文件加载信息。我将在下一个服务中尝试:

app/services/information-service.js
(函数(){
"严格使用",;
角度模块('gulpAngularCv')。工厂('InformationService','InformationService');
/**@ngInject*/
函数信息服务($log、$q、$resource、toastr、LanguageService){
var服务={};
service.getInformation=getInformation;
var初始化={};
var信息=[];
函数getInformation(){
var language=LanguageService.getActiveLanguage();
如果(已初始化===语言){
返回信息;
}否则{
初始化(语言),然后(
功能成功(结果){
angular.forEach(结果、函数附加信息(信息){
信息。推送(信息);
})
初始化=语言;
},功能失败(拒绝){
$log.error(“加载'res/information_'+language.short+“.json'失败”);
$log.error(拒绝);
toastr.error('确保格式正确','加载信息文件失败!');
}
);
返回信息;
}
}
函数初始化(语言){
var deferred=$q.deferred();
$resource(“res/information”+language.short+“.json”).query(
功能成功(结果){
延迟。解决(结果);
},功能失败(拒绝){
延期。拒绝(拒绝);
}
);
回报。承诺;
}
回程服务;
}
})();
一、 基本上,做同样的事情,但这一次,它不会工作,因为看起来,这个服务是先注入的,即使它依赖于另一个。我在浏览器的控制台中遇到以下错误:

TypeError: Cannot read property 'short' of undefined
    at initialize (http://localhost:3000/app/services/information-service.js:44:48)
    at Object.getInformation (http://localhost:3000/app/services/information-service.js:25:13)
    at new MainController (http://localhost:3000/app/main/main-controller.js:12:40)
    at invoke (http://localhost:3000/bower_components/angular/angular.js:4535:17)
    at Object.instantiate (http://localhost:3000/bower_components/angular/angular.js:4543:27)
    at http://localhost:3000/bower_components/angular/angular.js:9395:28
    at link (http://localhost:3000/bower_components/angular-route/angular-route.js:977:26)
    at invokeLinkFn (http://localhost:3000/bower_components/angular/angular.js:9039:9)
    at nodeLinkFn (http://localhost:3000/bower_components/angular/angular.js:8533:11)
    at compositeLinkFn (http://localhost:3000/bower_components/angular/angular.js:7929:13) <div ng-view="" class="ng-scope">

我已经看过并提出了问题,还有官方文档,但它们只让我了解了这么多…

毕竟,我相信问题的原因是Javascript中的可见性和作用域。在信息服务(在问题中发布)中,我使用了一个名为
information的“全局”变量