2015-09-07 27 views
2

我有一个表可排序列(根据排序存及其方向的头图标确定):更好的方式来使用纳克级

<table border="1"> 
    <thead> 
     <tr> 
      <th>#</th> 
      <th ng-click="sort(studies, 'PatientName')" class="sortable" 
      ng-class="{'ascending': sortingField == 'PatientName' && sortingDirection == 'asc' , 
         'decending': sortingField == 'PatientName' && sortingDirection == 'desc' }">PatientName</th> 
     </tr> 

我觉得我在纳克级使用的是不好的做法,我该如何改进它?
我该如何避免重复检查,并且不需要重复'PatientName'字段,因为我需要使用不同名称的其他列。

非常感谢。

回答

3

逻辑部分可以在控制器来完成:

if (sortingField == "PatientName") { 
    $scope.headerClass = sortingDirection == "asc" ? "ascending" : "descending"; 
    // or even: 
    // $scope.headerClass = sortingDirection + "ending"; 
} 

然后在您的视图:

<th ng-class="headerClass" ...></th> 
+0

谢谢,但我仍然需要保持变量为每个列,我能避免它的基础上实际上只有一个字段可以 –

+0

@DorCohen您可以使用一个对象:'ng-class =“headerClass ['PatientName']”'。您的控制器将负责填充阵列。 – sp00m

0

你的控制器将有getClass方法,将决定类。

标记

ng-class="getClass(sortingField, sortingDirection)" 

代码

//this list will be somewhere in controller 
var sortFieldList = ['PatientName', 'PatientAge'] //this list will have multiple elements 
$scope.getClass = function(sortingField, sortingDirection){ 
    var className; 
    if(sortFieldList.indexOf(sortingField) && !sortingDirection) 
    switch(sortingDirection){ 
     case "asc": 
     className = 'ascending'; 
     break; 
     case "desc" 
     className = 'descending'; 
     break; 
    } 
    return className; 
    return ''; 
} 
+2

为什么''asc“+”ending“trick?这是一种人为依赖。 “开关/外壳”在这里更适合IMO。 –

+0

@SergioTulentsev谢谢你的建议..我更新了我的代码.. –