2015-08-14 49 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" 
     } 
    } 
}]