所以我有一个返回活动列表的API,但我必须一次获取2个项目,所以如果我在第一次调用时有3个项目,那么返回的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"
}
}
}
我想通过这个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在'inst'中有2个或更多个对象时(例如在第一个例子中),因为它是一个数组,但当它只有一个对象不起作用时,这是有效的,我能做什么两种情况下的ng-repeat工作? 先谢谢
答案 0 :(得分:4)
这是因为在第二种情况下,它获取对象,当迭代对象时,它获取属性和值而不是第一个数组中的对象。
将该对象包装在数组中然后它可以正常工作。
$ scope.basket = angular.isArray(data.cesta.inst)? data.cesta.inst:[data.cesta.inst];
答案 1 :(得分: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: ...}
因此ng-repeat
将遍历该对象上的属性(即nu_doc, nu_inst
...)而不是将其视为具有单个对象的数组,这正是您想要的。
所以你的第二件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"
}
}
}]