javascript - 如何在 AngularJS 中编写通用排序

标签 javascript json angularjs sorting

我正在编写一个 angular.js 应用程序,我需要在 JSON 数组上执行 filter-orderBy 。 如果我通过创建一个不带参数并使用 $scope 引用显式数组的方法来做到这一点,则一切正常:

...
<th class="ui th" ng-click="sortArray('name')">Name</th>
...

sortArray = (sortParam) ->
  $scope.myArray = $filter('orderBy')($scope.myArray, sortParam)

但是如果我尝试通过将数组作为方法参数来泛化它,如下所示:

...
<th class="ui th" ng-click="sortArray(myArray,'name')">Name</th>
...

sortArray = (arr,sortParam) ->
  arr = $filter('orderBy')(arr, sortParam)

看起来数组在后端已排序,但使用它进行 ng-repeat 的表在视觉上保持不变。示例:我有这个数组:

{ arr : 
 [
  { 'id' : 1 },
  { 'id' : 2 },
  { 'id' : 3 }
 ]
}

现在,在第一种情况下,如果我按第一种情况排序,渲染将更改以匹配排序后的数组。但在第二种情况下,渲染不会改变(它仍然显示为 1 - 2 - 3),但如果我让它打印第一个单元格的 id(呈现“1”),它会显示“3”(排序后数组的顶部。希望它有意义。

我需要它的原因是打开一个包含单击的行内容的模式。为此,我在 ng-repeat 标记中放置了 ng-click,索引为:

<tr ng-repeat="row in arr | filter:filter" ng-click="loadModal($index)">

这样,即使数组重新排序,loadModal($index) 的值也不会改变,in 将以正确的行打开。

那么,在这么长的解释之后 - 我如何编写一个通用方法,它可以接受和排序不同的数组(代码重用),但也会影响渲染?或者,这是这样做的正确方法吗?我没有数组条目的 ID,也没有任何自然的东西可以用来识别该行。

最佳答案

我认为你不需要编写通用方法!

在 View 中使用 orderBy 过滤器和 ng-repeat ,例如

<tr ng-repeat="friend in friends | orderBy:predicate:reverse">

并在ng-click上设置谓词值,例如

<th class="ui th" ng-click="predicate = 'name'; reverse= !reverse">Name</th>

当您点击Name时,predicate会将值传递给orderBy过滤器,您的 View 会自动调整最新的更改,相反= !reverse 用于切换排序。

检查 angularjs Demo

关于javascript - 如何在 AngularJS 中编写通用排序,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21422916/

相关文章:

javascript - 玩Javascript函数

javascript - 是否可以在重新加载后立即执行函数...?

javascript - 在基于 require.js 的项目中加载 webpack 模块返回 null

javascript - map 和 switchMap 一起使用

javascript - 为什么此 HTML 范围栏的值大于 1,而其最大值设置为 1?

java - jackson 在通用列表中读取 json

ios - 在IOS中解析嵌套的JSON代码

PythonAnywhere 上的 JSONDecodeError

javascript - 在 AngularJS 中返回一个值

javascript - 如何在 angularJS 中使用 ng-if