动态orderBy在AngularJS中

时间:2015-04-14 19:26:37

标签: javascript angularjs sorting angularjs-ng-repeat

我想根据下拉菜单中的值动态订购一系列对象。这就是我目前在我的列表中所做的:

ng-repeat="item in filteredItems = (items | filter:searchInput | orderBy:canBeAnything)"

但问题是,排序可以是对象的属性,也可以是使用函数的计算值。它也应该能够以降序排列(可选)。

我知道我可以在orderBy后面的canByAnything变量中使用一个字符串来传递对象的属性,如:

“-creationDate” // descending ordering on creation date
“customer.lastname” // ascending ordering on customers last name

我也知道我可以通过以下函数来命令:

orderBy:myCalculatedValueFunction // will order in an ascending way based on a calculated value, for example calculating the total price of the object if it was an order or something

但我不知道并想要实现的是:

  • 如何组合它以便我可以使用函数进行排序以及对象的属性/属性。我是根据用户选择的内容动态地表示其中一个。哪个可以是属性或计算值,可以是降序还是升序。
  • 如何以递减方式对计算值进行排序

2 个答案:

答案 0 :(得分:11)

orderBy:myCalculatedValueFunction更新为orderBy:dynamicOrderFunction

$scope.dynamicOrderFunction = function() {
    if (orderByString) {
        return '-creationDate';
    }
    else {
        return myCalculatedValueFunction;
    }
}

orderBy还有一个第3个属性,它接受一个布尔值,并在true时反转orderBy。 (orderBy:dynamicOrderFunction:reverseOrder其中$scope.reverseOrder = true; // or false


修改

实际上你会遇到试图以字符串方式切换orderBy的问题。结帐this jsfiddle以获取有效的动态订单功能。

答案 1 :(得分:0)

所以你必须创建自己的过滤器并按照自己的意愿行事, 谷歌有很多例子。只需搜索:

角度自定义过滤器

论文的最后几天,我遇到过滤器创建的一些问题,我发现: https://github.com/a8m/angular-filter

我已经立即添加了它,我知道我很快就会使用它。也许它会帮助你。  如果它可以帮助您解决问题,请不要忘记确认我的答案;)