角度javascript数据是嵌套对象,我似乎无法让d.data.Array[2]工作
我一直在使用一个角度服务,其中的数据返回得很好。 但是,我想直接调用json文件,但现在它不喜欢数据 工作版本 控制器代码:角度javascript数据是嵌套对象,我似乎无法让d.data.Array[2]工作,javascript,angularjs,json,Javascript,Angularjs,Json,我一直在使用一个角度服务,其中的数据返回得很好。 但是,我想直接调用json文件,但现在它不喜欢数据 工作版本 控制器代码: var confirm = this; confirm.booking = airConfirmationService.getTestData(); .factory('airConfirmationService', airConfirmationService); var confirm = {}; confirmed.getTestData = functi
var confirm = this;
confirm.booking = airConfirmationService.getTestData();
.factory('airConfirmationService', airConfirmationService);
var confirm = {};
confirmed.getTestData = function () {
return {
"flightData": [
{
"MultiCarrier": false,
// etc...
服务代码:
var confirm = this;
confirm.booking = airConfirmationService.getTestData();
.factory('airConfirmationService', airConfirmationService);
var confirm = {};
confirmed.getTestData = function () {
return {
"flightData": [
{
"MultiCarrier": false,
// etc...
但是,我切换到一个带有.service的服务,并直接调用.json文件的位置
不工作(嗯,它提取数据,但返回的方式我不理解)
然后在控制器中
var confirm = this;
confirm.booking = airConfirmationService.getTestData();
console.log(confirm.booking) // Picture attached shows how the data looks
// My attempt at getting "at" the data ...
//var temp = [];
//temp = airConfirmationService.getTestData();
//confirm.booking = temp.d.Data;
更新
虽然下面的代码“有效”,但我有一种感觉,不执行“q”/“defer/”。那么将是不好的
这段代码在调用服务的控制器中工作,但是我如何添加/更改q/DEBER和/或。然后呢
var getData = airConfirmationService.getTestData();
getData.success(function(data) {
confirm.booking = data;
});
角度
$http
是异步的。从服务器获取数据的网络操作可能需要一些时间,因此angular不希望您的应用程序等待操作完成,直到数据可用为止。因此,promise对象被用作数据的占位符。Promission有一个.then()
函数,它告诉promise在操作完成后应该执行一些其他代码。它们还提供了一个.catch()
函数,用于在出现问题且数据未返回时使用
使用$http
的正确方法是:
var confirm = this;
confirm.testData = {};
airConfirmationService.getTestData()
.then(function(response) {
confirm.testData = response.data;
})
.catch(function(){
//something went wrong
});
查看$q和$q.defer()。。您需要返回承诺。
$http
是异步的并返回承诺,您需要使用.then()
在从服务器返回数据后获取数据。但我似乎是根据我发布的图像获取“数据”,对吗?我正试着用.d.数据来解决这个问题。但这不起作用,为什么console.log会用flightData:Array[2]和所有数据显示结构。。。但我看不懂?不,你误解了你所看到的$http
速度足够快,当您输出到控制台时,结果将在您到达控制台并展开视图时返回。但是,当您试图读取代码中的数据时,您的代码不知道等待,而是试图立即获取数据。这就是.then()
的作用,等待承诺完成。好的,我如何在控制器中使用.then?我所做的“工作”是在控制器调用它时添加一个.success。然后将是一个背面的想法,我将张贴在底部的问题下的代码更新:thx!我的代码和你的代码都存在一个奇怪的问题,即console.log(confirm.booking)(我修改了你的代码)-都以-->confirm.booking-Object-proto的形式输出到chrome控制台,而没有任何数据树可供查看,即使数据已被添加到UI中。。。这是因为空白声明<代码>确认?预订= {} < /代码>。调用服务,然后在调用对象时,console.log
输出就是该对象的输出。如果删除此空白声明,则外部的控制台.log
。then()
将是未定义的,因为在该阶段甚至没有定义属性。但是,如果您在.then()
中使用控制台.log
,则无论您是否有空声明,都将返回任何内容。原始代码(不带。然后或。成功)仅显示承诺对象,因为您正在将承诺分配给。booking
对象,紧靠控制台.log之前。根据承诺,在控制台.log
输出空对象之前,您不会重新分配.booking
对象。好的,在阅读您的2条评论之前,我正在考虑这个问题。因此,我是否真的应该将承诺分配给.booking对象,因为数据的“生存”时间是否更长似乎很好/理想?不,这没有什么意义。我认为您感到困惑的是,console.log
是即时的,而$http
是延迟的。因此,当您使用console.log
尝试输出数据时(除了原始代码,您实际输出的是$http
本身而不是您的数据),您总是会在调用console.log
时看到数据。