如何用ng-repeat压平

时间:2013-06-12 22:04:38

标签: angularjs angularjs-ng-repeat

我有:

    businesses: [
    {businessName: 'A', "address":[loc1, loc2, loc3]},
    {businessName: 'B', "address":[loc1, loc2]},
    {businessName: 'C', "address":[loc1]}
};

我想用输出重复此对象:

A | street, city, zip, state 
A | street, city, zip, state 
A | street, city, zip, state 
B | street, city, zip, state 
B | street, city, zip, state 
C | street, city, zip, state 

换句话说,我希望在具有ng-repeat的表格中将此对象显示为平面。

我是否必须自己压扁它,或者ng-repeat是否有能力做到这一点?

理想情况下,我可以做一些像

这样的事情
ng-repeat business in businesses
business.businessName | business.address.City | business.address.State

通过指定地址,它应该知道我想要它们全部。

否则,我如何压扁像这样的物体?

谢谢!

2 个答案:

答案 0 :(得分:4)

好像你可以稍微处理一下,比如:

var flatBusinesses = [];
for (business in businesses) {
    for (address in business.addresses) {
        flatBusinesses.push ({name: business.name, address: address.City, state: address.State}
    }
}

然后在视图中重复flatBusinesses

答案 1 :(得分:3)

下划线库有许多用于处理javascript数组和对象的函数,这些函数可以很好地作为angular的补充:

http://underscorejs.org/

您需要下载该库并将其添加到您的项目中。

然后你可以写:

var flatBusinesses = _.flatten(_.pluck(businesses, 'address'));

您应该能够将下划线库添加到范围:

$scope._ = _;

然后将其直接添加到您的模板中:

<div ng-repeat="business in _.flatten(_.pluck(businesses, 'address'))">
{{business.businessName}} | {{business.address.City}} | {{business.address.State}}
</div>

修改

所以,我没有仔细阅读你的问题,在你的情况下,扁平和拔除不会削减它。

我把一个小提琴放在下面用下划线来使它起作用,但最终的结果是比rquinn的反应更好。

无论如何,如果你想看一下,这就是小提琴:http://jsfiddle.net/pna7f5h3/