在多个阵列上使用ng-repeat

时间:2015-01-22 16:55:40

标签: javascript arrays angularjs ng-repeat

我正在制作一个天气应用程序,但我仍然坚持应该是一项简单的任务,但由于我是Angular的新手,所以无法解决这个问题。基本上我需要的是一次迭代两个数组并从这个数组中设置一些值。

理论上这就是我想要完成的事情:

<div ng-repeat="city in cities" ng-repeat="temp in temperatures" id={{city.id}}>
    <span>{{temp}}</span>
</div>

但显然你不能放这样的多个中继器。如果我在跨度上放置ng-repeat,我得到12个跨度,但我只需要1,我需要这个1来包含temperatures中迭代的当前值。

使用API​​动态创建后,数组看起来像这样:

城市:[object, object, object, object, object, object, object, object, object, object, object, object]

温度:[-2.3, -0.2, -1.2, -25.4, 2.9, -4.8, -2.2, -12.1, 0.3, -5.9, -7.7, -0.1]

我该怎么做?

3 个答案:

答案 0 :(得分:3)

你不能在一个div中使用两个ng-repeat

您需要另外一种方法,请尝试此建议

<div ng-repeat="city in cities" id={{city.id}}>
    <span>{{temperatures[$index]}}</span>
</div>

---- 为最佳做法

不要使用$index 这是一种不好的做法,但在这种情况下你可以达到你想要的效果。

你可以做这样的事情,

<div ng-repeat="city in cities">
    <span>City: {{city}} - Temperature: {{ getTemprature(city) }}</span>
</div>

在控制器中,

$scope.getTemprature = function(city) {
    var index = cities.indexOf(city);
    return temperatures[index];
}

因为如果您使用orderByng-repeat $index的行为不会像您所假设的那样,$index将获得有序数组$index而不是实际数组$index

答案 1 :(得分:3)

使用索引(假设temperatures是同一控制器中定义的温度数组):

<div ng-repeat="city in cities">
    <span>City: {{city}} - Temperature: {{temperatures[$index]}}</span>
</div>

答案 2 :(得分:1)

您可以使用lodash's zip function完成此操作。试试这个:

<强>控制器

$scope.combinedData = _.zip(cities, temperatures);

查看

<div ng-repeat="row in combinedData" id="{{row[0].id}}">
    <span><b>{{row[0].name}}</b> {{row[1]}}</span>
</div>

工作小提琴: http://jsfiddle.net/hojrhLx5/1/