按功能排序,在角度js上,单击标题表

时间:2015-04-21 17:40:26

标签: angularjs angularjs-ng-repeat

我正在尝试学习角度。我一直在使用Oracle的默认hr模式,而我正在使用Web API来恢复员工集合和部门集合。

我正在渲染一个HTML表来显示员工信息。对于department列,我有一个带emp.department_id的函数,对department集合进行查找并返回部门名称。

我在表格上有标题,点击时按升序或降序对表格进行排序。

但是我正在努力处理部门名称列上的排序,因为部门名称实际上不是员工集合上的字段。我尝试按照我用来获取值的函数进行排序,但我还没得到它。

在我的控制器中,我有以下功能来获取部门名称:

$scope.getDeptName = function(id){
for (var i=0; < model.departments.length; i++{
   if(model.departments[i].department_id == id){
       return model.departments[i].department_name;
    }}}

我的表格标题:

<tr><th><a href="#" ng-click=orderByField='last_name'; reverseSort =! reverseSort>Name</a><th>

<th><a href="#" ng-click=orderByField='getDeptName(department_id)'; reverseSort =! reverseSort>Dept Name</a><th></tr>

<tr> ng-repeat="emp in model.employees |orderBy:orderByField:reverseSort">

按部门名称排序不起作用,我不确定如何按功能排序。

2 个答案:

答案 0 :(得分:0)

必须将orderByField设置为函数,以获取员工的姓名。不是包含对此函数的调用的字符串。因此,正确的方法是

ng-click="orderByField = getDeptNameFromEmployee"

,在JS中,相当于

$scope.orderByField = $scope.getDeptNameFromEmployee;

但要注意:getDeptNameFromEmployee必须将employee对象作为参数,而不是员工ID才能使其生效。所以看起来应该是

$scope.getDeptNameFromEmployee = function(employee) {
    return $scope.getDeptName(employee.deptId);
};

答案 1 :(得分:-1)

从函数调用中取出引号:

<a href="#" ng-click=orderByField='getDeptName(department_id)'; reverseSort =! reverseSort>Dept Name</a>

应该是:

<a href="#" ng-click="orderByField=getDeptName(department_id); reverseSort =! reverseSort">Dept Name</a>
相关问题