将orderBy过滤器转换为指令

时间:2015-05-04 21:28:50

标签: javascript angularjs

我的应用程序中有一个频繁的模式,我很好奇是否有可能通过自定义指令解决它:

select(ng-model='selectedEmployee' 
  ng-options="employee.name for employee in employees |
  orderBy:[employeeSort, 'name']")

employees = [{name: EMP1, ...}, {name: EMP2, ...}]

我的排序功能是:

$scope.employeeSort = function(employee) 
{
    return employee._id != '0' ? '' : employee
}

正如你所看到的,我的数组中有一个虚拟元素,我总是希望显示在顶部,但是在某些属性中对其余项进行排序(在这种特殊情况下为name)。对于虚拟元素,我总是有_id = 0

因此,不是为所有情况编写自定义排序函数,而是设置我的标记以使用该函数,我想使用这样的指令:

select(ng-model='selectedEmployee' keep_id_0_on_top
  ng-options="employee.name for employee in employees |
  orderBy:'name'")

1 个答案:

答案 0 :(得分:0)

我认为过滤器比指令更合适。 像

这样的东西
<select ng-options="item in items | orderBy:name | stickyTop:0">

filter('stickyTop', function(array, id) {
    for (var i = 0 ; i < array.length ; i++) {
        if (array[i].id === id) {
           var topEls = array.splice(i, 1);
           array.unshift(topEls[0]);
           break;
        }
    }
    return array;
})

(代码未经过测试,但您明白了)