0

我有一个员工列表,并且有一个名为 mobile 的字段,其值为 true 或 false。我希望能够$filter('orderBy')使用 angularJS 在这个“移动”字段上做一个。例如,我希望能够过滤员工列表,其中所有“移动”字段设置true为显示在列表顶部的员工。

我不想在ng-repeat. 出于各种原因,我想在我的代码中执行此操作。无论如何,我有以下代码,但是将“移动”字段设置为的员工并true没有像我想要的那样出现在列表的顶部。你能告诉我如何使用$filter('orderBy')方法来实现这个吗?

这是代码:

col = "mobile";
$scope.employees = $filter('orderBy')($scope.employees, col);
4

2 回答 2

2

Javascript 中的假值小于真值(0 < 1);这就是为什么mobile = false在您按该属性对员工进行排序之后,员工首先出现的原因。

所以为了完成你想要的,你只需要orderBy通过在属性名称前加上 - (破折号)来更改排序顺序:

$scope.employees = $filter('orderBy')($scope.employees, '-mobile');

在这里工作。

您可以在有关过滤器的文档中找到更多信息。orderBy

于 2014-03-31T17:57:48.410 回答
0

我认为这就是你要找的:http: //jsfiddle.net/Sg9YY/

因为您不希望在 ng-repeat 中使用过滤器,所以您需要提供过滤后的联系人:

$scope.filteredEmployees=angular.copy($scope.employees);

然后你可以观察任何事件,然后在控制器中应用过滤器:

$scope.$watch('sort',function(){
    if($scope.sort=='none'){
        $scope.filteredEmployees=angular.copy($scope.employees);
    }else{
        $scope.filteredEmployees=$filter('orderBy')($scope.employees,'myVar',$scope.sort);
    }
});
于 2014-03-31T17:58:02.247 回答