Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/angularjs/25.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
角度javascript数据是嵌套对象,我似乎无法让d.data.Array[2]工作_Javascript_Angularjs_Json - Fatal编程技术网

角度javascript数据是嵌套对象,我似乎无法让d.data.Array[2]工作

角度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

我一直在使用一个角度服务,其中的数据返回得很好。 但是,我想直接调用json文件,但现在它不喜欢数据

工作版本

控制器代码:

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
时看到数据。