2015-08-14 62 views
1

所以我有一個API返回一個活動列表,但我必須一次獲得信息2項,所以如果我有第一次調用3個項目json返回將是東西像這樣:ng-repeat與不同的嵌套json

cesta{ 
fecha="14/08/2015 2:42:28 PM", 
tipo="9", 
pagina="1", 
total="3", 
inst [{ 

    nu_doc_opened="N", 
    nu_doc="14", 
    nu_inst="1", 
    nb_wf{ 
     cdata_section="Gestión calendario específico" 
     } 
    }, 
    nu_doc_opened="N", 
    nu_doc="15", 
    nu_inst="2", 
    nb_wf{ 
     cdata_section="Gestión calendario general" 
     } 
    }] 
} 

,並在下次調用JSON返回會是這樣

cesta{ 
fecha="14/08/2015 2:42:29 PM", 
tipo="9", 
pagina="2", 
total="3", 
inst { 
    nu_doc_opened="N", 
    nu_doc="16", 
    nu_inst="1", 
    nb_wf{ 
     cdata_section="Gestión calendario específico" 
     } 
    } 
} 

我想去throgh此JSON,並得到了一些數據,並把它放在一個表,所以我試圖用ng-repeat像這樣:(注意,我只想得到一些不是全部的值)

$scope.basket= data.cesta.inst; 

<tbody> 
    <tr ng-repeat="b in basket"> 
    <td>{{b.nu_doc}}</td> 
    <td>{{b.nu_inst}}</td> 
    <td>{{b.nb_wf.cdata_section}}</td> 
    </tr> 
</tbody> 

的問題是,這個工程時,JSON在「出師表」 2個或多個對象(如在第一個例子),因爲它是一個數組,但是當它只有1對象將不能正常工作,有什麼事情在兩種情況下,我都這樣做了重複工作? 先進的感謝

回答

4

這是因爲在第二種情況下,它獲得對象時,迭代對象,它獲得的屬性和值不像第一個數組中的對象。

將該對象包裝在數組中,然後工作。

$ scope.basket = angular.isArray(data.cesta.inst)? data.cesta.inst:[data.cesta.inst];

+0

是的,你必須確保你的研究所始終是一個數組:) –

+0

謝謝!這是我想要的!工作完美 – CBalderrama

1

如你所知,ng-repeat需要一個數組。如果你不能強制端點總是返回一個數組(即使只有一個數據對象),那麼你可能不得不寫一個hacky的解決方法。

一個哈克的想法:

$scope.basket = data.cest.inst.length !== undefined ? data.cest.inst : [data.cest.inst]


我覺得你這一點,但如果沒有,這裏的原因$scope.basket需求是一個數組的原因: 簡而言之:ng-repeat預計數組。在第一種情況下,$scope.basket是一個對象數組,但在第二種情況下,它只是一個對象。在第二種情況下,您需要將對象放在數組中(即[{nu_doc: ...}]),以使格式一致。 (注:這是確定有一個陣列,只有一個對象!)

例如,在第一種情況下,你會得到:

$scope.basket = [{nu_doc: ...}, {nu_doc: ...}] 

這正常工作與ng-repeat語句,你寫它。

但是在第二種情況下,您可以:

$scope.basket = {nu_doc: ...} 

所以通過對象的屬性(即nu_doc, nu_inst ...),而不是把它當作一個單個對象數組ng-repeat將循環,這是你想要的。

所以你的JSON的第二件必須是:

cesta{ 
fecha="14/08/2015 2:42:29 PM", 
tipo="9", 
pagina="2", 
total="3", 
inst [{ 
    nu_doc_opened="N", 
    nu_doc="16", 
    nu_inst="1", 
    nb_wf{ 
     cdata_section="Gestión calendario específico" 
     } 
    } 
}]