AngularJS OrderBy更新源数组
AngularJS OrderBy update source array
我正在使用内置的 Angular 过滤器 OrderBy 按日期过滤我的项目,它在 DOM 中按预期工作,但我认为它会更新数组本身所以我可以工作随着物品的新顺序。
有人知道如何实现吗?
谢谢。
P.S。
如果有任何变化,我正在使用 AngularJS 1.3.14。
在将数组绑定到 DOM 之前,您应该从控制器重新排序数组。这也更高效,因为 Angular 不需要在每个摘要周期重新计算顺序。
$scope.myOrderedArray = order( $scope.myArray );
并且在 DOM
<div ng-repeat="item in myOrderedArray"> ... </div>
过滤器 returns 数组的排序副本,因此您可以将其分配给您的范围并保存排序数组的引用。
您可以在控制器中注入 $filter 服务,然后像这样以编程方式使用它:
var orderBy = $filter('orderBy');
$scope.array = orderBy(unsortedArray, expression);
可以找到有关此过滤器的更多信息 here。
当然,如果您的排序表达式是动态的,那么您将不得不在每次更改时更新数组的引用,这并不总是理想的,但对于较小的数据量来说绝对可行。
我正在使用内置的 Angular 过滤器 OrderBy 按日期过滤我的项目,它在 DOM 中按预期工作,但我认为它会更新数组本身所以我可以工作随着物品的新顺序。
有人知道如何实现吗?
谢谢。
P.S。 如果有任何变化,我正在使用 AngularJS 1.3.14。
在将数组绑定到 DOM 之前,您应该从控制器重新排序数组。这也更高效,因为 Angular 不需要在每个摘要周期重新计算顺序。
$scope.myOrderedArray = order( $scope.myArray );
并且在 DOM
<div ng-repeat="item in myOrderedArray"> ... </div>
过滤器 returns 数组的排序副本,因此您可以将其分配给您的范围并保存排序数组的引用。
您可以在控制器中注入 $filter 服务,然后像这样以编程方式使用它:
var orderBy = $filter('orderBy');
$scope.array = orderBy(unsortedArray, expression);
可以找到有关此过滤器的更多信息 here。
当然,如果您的排序表达式是动态的,那么您将不得不在每次更改时更新数组的引用,这并不总是理想的,但对于较小的数据量来说绝对可行。