作为嵌套对象的Angular javascript数据我似乎无法让d.data.Array [2]工作

时间:2016-12-30 01:31:11

标签: javascript angularjs json

我一直在使用角度服务,数据返回正常。 但是,我想直接调用json文件,除非它现在不喜欢数据。

工作版

控制器代码:

var confirm = this;
confirm.booking = airConfirmationService.getTestData();  

服务代码:

.factory('airConfirmationService', airConfirmationService);
var confirm = {};
confirmed.getTestData = function () {
    return {
        "flightData": [
          {
          "MultiCarrier": false,
          // etc...

但是我使用.service切换到服务并直接调用.json文件的位置。

无法正常工作(好吧,它会提取数据,但会以我不理解的方式返回)

.service('airConfirmationService', function ($http) {

        this.getTestData = function () {
            return $http({
                url: '../apps/temp/Api_Responses/confirm.booking.json',
                method: "GET"
            })
        }

    });

然后在控制器中

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;

enter image description here

更新

虽然下面这段代码“有效”,但我觉得不做“q”/ defer /。然后会很糟糕......

此代码在调用服务的控制器中有效,但是如何添加/更改为q / defer和/或.then?

 var getData = airConfirmationService.getTestData();
        getData.success(function(data) {
            confirm.booking = data;
        });

1 个答案:

答案 0 :(得分:0)

Angular $http是异步的。从服务器获取数据的网络操作可能需要一些时间,因此angular不会期望您的应用程序等待操作完成,直到数据可用为止。因此,promise对象用作数据的占位符。 Promise有一个.then()函数,告诉它在操作完成后应该执行其他代码的承诺。它们还提供.catch()函数,用于何时出现错误且数据未被返回。

使用$http的正确方法是:

var confirm = this;
confirm.testData = {};
airConfirmationService.getTestData()
.then(function(response) {
    confirm.testData = response.data;
})
.catch(function(){
    //something went wrong
});