在多个数组上使用重复

Using ng-repeat on multiple arrays

我正在制作一个天气应用程序,但我一直坚持应该是一项简单的任务,但由于我是 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]

我该怎么做?

你不能将两个 ng-repeat 合二为一 div。

您需要一种替代方法,请尝试此建议

<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.

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

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

您可以使用 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>

工作 fiddle: http://jsfiddle.net/hojrhLx5/1/