我有一个员工列表,并且有一个名为mobile的字段,其值为true或false。我希望能够使用angularJS在此“移动”字段上执行$filter('orderBy')
。例如,我希望能够过滤员工列表,其中“移动”字段设置为true
的所有员工都显示在列表顶部。
我不想在ng-repeat
中执行此操作。出于各种原因,我想在我的代码中执行此操作。无论如何,我有以下代码,但将“移动”字段设置为true
的员工并未按照我的意愿出现在列表的顶部。您能告诉我如何使用$filter('orderBy')
方法实现这一目标吗?
以下是代码:
col = "mobile";
$scope.employees = $filter('orderBy')($scope.employees, col);
答案 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);
}
});