我需要循环一个URL列表并在一个表中显示结果。
似乎orderBy
不起作用,因为list($scope.versions)
来自多个HTTP调用,而HTTP是异步的。
控制器:
var callApi = function (app, env, index, url) {
$http.get(url).
success(function(data) {
data.pos=index;
$scope.versions[app].push([data]);
}).
error(function(data, status) {
var errorData = {};
errorData.pos=index;
$scope.versions[app].push([errorData]);
});
console.log($scope.versions);
};
HTML:
<tbody>
<tr ng-repeat="(k,v) in versions">
<td>{{k}}</td>
<td ng-repeat="item in v | orderBy:'item[0].pos'"
ng-class="{'danger': item[0].error === true, 'success': item[0].error === false}">
[{{item[0].pos}}]
</td>
</tr>
</tbody>
答案 0 :(得分:0)
有点不清楚你究竟想要做什么,而且不清楚你的数据是什么样的,但从一般意义上讲,你可以随时对数据进行排序。
例如,您可以使用splice()
将数据插入数组中所需的数据:
$scope.items = [];
var urls = [ <some urls> ];
urls.forEach( function (url) {
$http.get(url)
.success( function (data) {
var position = getPosition(data);
$scope.items.splice(position, 0, data);
})
.error( function (data, status) {
// Handle the error case
});
});
function getPosition (data) {
// Some code to find where the element
// should be inserted into the array
return position;
}
或者,您可以在添加新数据后每次对数据进行排序:
$scope.items = [];
var urls = [ <some urls> ];
urls.forEach( function (url) {
$http.get(url)
.success( function (data) {
$scope.items.push(data);
$scope.items.sort(itemsCompareFunc)
})
.error( function (data, status) {
// Handle the error case
});
});
function itemsCompareFunc (a, b) {
// Some logic to compare both items
}