如何使用$ filter(' orderBy')过滤布尔值

时间:2014-03-31 17:32:17

标签: angularjs angularjs-filter angularjs-orderby

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

我不想在ng-repeat中执行此操作。出于各种原因,我想在我的代码中执行此操作。无论如何,我有以下代码,但将“移动”字段设置为true的员工并未按照我的意愿出现在列表的顶部。您能告诉我如何使用$filter('orderBy')方法实现这一目标吗?

以下是代码:

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

2 个答案:

答案 0 :(得分:2)

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

因此,为了达到您想要的效果,您只需要在orderBy中更改排序顺序,方法是在属性名称前加上 - (破折号):

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

工作插件here

您可以在documentation上找到有关orderBy过滤器的更多信息。

答案 1 :(得分: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);
    }
});