这可能简单而愚蠢,但我似乎无法弄明白。我创建了一个 ng-repeat 结构,我在不同的对象上多次使用它。基本上,我遍历这些对象内的数组中的元素,并根据需要应用自定义 orderBy 的一些变量,或将其保留在原始顺序中。
所以我创建了这样的自定义 orderBy:
<li ng-repeat="tag in filter.tags | orderBy: customSort(filter.customSort)">
基本上,过滤器对象包含标签数组和一个 bool 变量,用于说明是否需要应用自定义排序。在我的 customSort 函数中,我检查传递的参数是否为真并执行该自定义排序。但如果它是假的——我似乎无法在该数组中以原始顺序输出标签。
我不能传递 $index 因为那时它总是 0,它只会成为 ng-repeat 标签内的索引。我不能做那样的事情 filter.tags.indexOf(tag) 因为标签还不存在。
我有点卡住了,有没有办法有条件地应用 orderBy?
进一步说明: 我遍历一组标签并打印它们的本地化值,其中一些标签应按其原始顺序排列,一些应在其本地化版本中按字母顺序排列。所以我的剥离自定义排序做了这样的事情:
$scope.customSort = function(language) {
return function(tag) {
return $scope.tags.[language][tag];
}
}
最佳答案
到目前为止,这是我想出的唯一解决方案,在我将其标记为正确之前,我会稍等片刻,看看是否有人回答了更好的解决方案。
我必须将整个数组连同用于确定是否需要原始顺序或自定义排序的 bool 变量一起传递给排序函数,然后像这样使用 indexOf:
$scope.customSort = function(perform, tags, language) {
return function(tag) {
if (!perform) return tags.indexOf(tag);
return $scope.tags.[language][tag];
}
}
关于javascript - 将索引传递给自定义 orderBy 函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31763088/