AngularJs-factory:读取使用$resource获取的数据并返回其中的一部分
在我的工厂中,如何在从指令返回调用函数之前从.json文件中提取(读取)数据 这是我的工厂的定义AngularJs-factory:读取使用$resource获取的数据并返回其中的一部分,angularjs,angular-resource,resolve,Angularjs,Angular Resource,Resolve,在我的工厂中,如何在从指令返回调用函数之前从.json文件中提取(读取)数据 这是我的工厂的定义 (function () { "use strict"; angular .module("common.services") .factory("langService", ["$resource", langService]) function langService($resource) { var langData
(function () {
"use strict";
angular
.module("common.services")
.factory("langService", ["$resource", langService])
function langService($resource) {
var langData = $resource('services/langInfo.json').query();
function getInfo(language){
/*look for a specific code from langData and return*/
}
return {
getInfo: getInfo
}
}
}());
getInfo()是一个函数,用于从langData变量中查找适当的信息并返回它
以下是langInfo.json的json数据(尚未完成):
[{
"marathi": { },
"hindi": { },
"konkani": { },
"sanskrit": { },
"gujarati": { }
}]
我对AngularJs不熟悉,因此需要帮助。我想当我试图用console.log打印langData时,它没有被解析,因此我无法访问它。这就是我得到的
console.log(langData)
:
顺便问一下,我想做的是可能的吗?怎么做
编辑:
根据Stian Sandve的回答,我在调用langService时传递了回调函数,如下所示:
langService.getInfo('langCode', function(data) {
console.log(data);
});
并将getInfo的定义更改为
function getInfo(language, callback){
langData.query(function(data) {
var filteredData = filter(data); //assume filter() is defined
callback(filteredData);
});
}
所以我在回调函数中获取数据。但是我需要将它设置为在调用langService.getInfo之前声明的某个变量。比如说:
var langInfo
langService.getInfo('langCode', function(data) {
console.log(data);
//set data to langInfo
});
当您执行查询时,它会返回一个promise(您在控制台日志中看到的$promise)。实际上,promise包含返回的数据
var langData = [];
$resource('services/langInfo.json').query(function(data){langData = data;});
你可以期待等待一个承诺被执行,但是你会错过这个美丽的承诺
我要做的是:
$resource('services/langInfo.json').query(function(data){return data;});
然后在收到数据后进行过滤
或者,看看它在角度方面更像linq。当您执行查询时,它会返回一个承诺(您在控制台日志中看到的$promise)。本质上,promise具有返回的数据
var langData = [];
$resource('services/langInfo.json').query(function(data){langData = data;});
你可以期待等待一个承诺被执行,但是你会错过这个美丽的承诺
我要做的是:
$resource('services/langInfo.json').query(function(data){return data;});
然后在收到数据后进行过滤
或者,看看它在角度方面更像linq。在承诺得到解决后,您需要处理数据。根据AngularJS文件: 使用(value,responseHeaders)参数调用成功回调,其中值是填充的资源实例或集合对象。使用(httpResponse)参数调用错误回调 为了简化示例,我们不执行任何错误检查(只使用成功回调) 然后可以从指令中调用如下函数:
var response = {};
langService.getInfo('langCode', function(data) {
console.log(data);
response = data;
});
您需要在承诺得到解决后处理数据。根据AngularJS文件: 使用(value,responseHeaders)参数调用成功回调,其中值是填充的资源实例或集合对象。使用(httpResponse)参数调用错误回调 为了简化示例,我们不执行任何错误检查(只使用成功回调) 然后可以从指令中调用如下函数:
var response = {};
langService.getInfo('langCode', function(data) {
console.log(data);
response = data;
});
Angular是异步工作的,所以这不是它的工作方式。这里找到了一个关于如何在angular中加载json数据的好例子:angular是异步工作的,所以它不是这样工作的。在这里找到了一个关于如何在angular中加载json数据的好例子:您提到的第一件事不起作用。控制台仍然显示[]。第二件事我不明白;它将在哪里返回数据?如果您的意思是“var langData=$resource('services/langInfo.json').query(function(data){return data;});”那么这也不起作用尝试一下:var langData=[]$resource('services/langInfo.json').get(函数(数据){console.log(数据);langData=data;});那不行。正如Stian所解释的,我需要从调用“langService.getInfo”方法的地方传递一个回调函数。你提到的第一件事没有起作用。控制台仍然显示[]。第二件事我不明白;它将在哪里返回数据?如果您的意思是“var langData=$resource('services/langInfo.json').query(function(data){return data;});”那么这也不起作用尝试一下:var langData=[]$resource('services/langInfo.json').get(函数(数据){console.log(数据);langData=data;});那不行。正如Stian所解释的,我需要从调用“langService.getInfo”methodwait的地方传递一个回调函数。。在回调函数中,我得到了数据。但是如何将其设置为变量呢?假设变量是在调用api之前声明的。var反应;langService.getInfo('langCode',函数(数据){console.log(数据);});等待在回调函数中,我得到了数据。但是如何将其设置为变量呢?假设变量是在调用api之前声明的。var反应;langService.getInfo('langCode',函数(数据){console.log(数据);});