我正在制作一个天气应用程序,但我仍然坚持应该是一项简单的任务,但由于我是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]
我该怎么做?
答案 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];
}
因为如果您使用orderBy
而ng-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>