将索引传递给自定义orderBy函数

时间:2015-08-01 14:46:46

标签: javascript arrays angularjs

这可能很简单也很愚蠢,但我似乎无法弄明白。我创建了一个ng-repeat结构,我在不同的对象上多次使用。基本上,我遍历这些对象内的数组中的元素,并且根据某些变量,我需要应用自定义orderBy,或者保留原始顺序。

所以我已经创建了那个自定义订单:

<li ng-repeat="tag in filter.tags | orderBy: customSort(filter.customSort)">

基本上,filter对象包含一个标记数组和一个布尔变量,表明是否需要应用自定义排序。在我的customSort函数中,我检查传递参数是否为true并执行该自定义排序。但如果它是假的 - 我似乎无法在该数组中以原始顺序输出标签。

我无法传递 $ index ,因为此时它始终为0,它只会成为ng-repeat标记内的索引。我不能做那样的 filter.tags.indexOf(tag),因为标签还不存在。

我有点卡住,是否有办法有条件地应用orderBy?

进一步解释: 我遍历一系列标签并打印其本地化值,其中一些标签应按其原始顺序排列,其中一些应按其本地化版本的字母顺序排序。所以我的剥离自定义排序做了这样的事情:

$scope.customSort = function(language) {          
    return function(tag) {
        return $scope.tags.[language][tag];
    }
}

1 个答案:

答案 0 :(得分:0)

到目前为止,这是我提出的唯一解决方案,我会稍等一会儿,看看是否有人用更好的方法回答,然后才能将此标记为正确。

我必须将整个数组传递给排序函数,以及用于确定是否需要原始顺序或自定义排序的布尔变量,然后像这样使用indexOf:

$scope.customSort = function(perform, tags, language) {
    return function(tag) {
        if (!perform) return tags.indexOf(tag);       
        return $scope.tags.[language][tag];
    }
}