2016-06-17 1 views
2

Existe-t-il un moyen de créer un tri personnalisé pour une colonne contenant des données non textuelles?Données angulaires: trier les données non textuelles

Voici un aperçu:

enter image description here

je voudrais trier par l'icône symbole.

P.S. Les deux icônes sont affichées en utilisant ng-if et une valeur booléenne de l'ensemble de données.

Éditer: J'utilise la méthode angulaire d'affichage des données.

<table datatable="ng" dt-options="dtOptionsLoginHistory" dt-column-defs="dtColumnDefsLoginHistory" 
       class="table table-striped row-border hover" 
       width="100%"> 
      <thead> 
      <tr> 
       <th>Success</th> 
      </tr> 
      </thead> 
      <tbody> 
      <tr ng-repeat="entry in entries"> 
       <td style="width: 10%;"> 
        <i ng-if="!entry.failed" class="fa fa-check" style="color: green;"></i> 
        <i ng-if="entry.failed" class="fa fa-times" style="color: red;"></i> 
       </td> 
      </tr> 
      </tbody> 
     </table> 
+0

s'il vous plaît montrer exactement comment vous rendre la table. – davidkonrad

+1

@davidkonrad J'ai mis à jour ma question. –

+0

@davidkonrad Seriez-vous si aimable et regardez-moi une autre question de données, puisque vous connaissez probablement très bien cette bibliothèque? Voici le lien: http://stackoverflow.com/questions/38032004/angular-datatables-searching-for-a-specific-html-class-value –

Répondre

1

Il y a plusieurs façons de réaliser ce que vous voulez. Considéré comme votre configuration Je crois que le plus simple serait de créer un orderType spécial qui retourne une valeur basée sur les classes qui fa-* les <i> éléments est rendu avec:

$.fn.dataTable.ext.order['fa-classes'] = function(settings, col) { 
    return this.api().column(col, {order:'index'}).nodes().map(function(td, i) { 
    return $('i', td).hasClass('fa-check') ? '1' : '0'; 
    }) 
} 

donnera tout <i class="fa fa-check"> ordre 1, tout autre 0. Cela peut également être un switch { .. } renvoyant plusieurs valeurs de commande différentes. Utilisez comme ceci:

$scope.dtColumnDefsLoginHistory = [ 
    DTColumnDefBuilder.newColumnDef(0).withOption('orderDataType', 'fa-classes') 
]; 

petite démo ->http://plnkr.co/edit/8S5f2MR331CiNBYYfDQf?p=preview

+0

Merci beaucoup, votre solution fonctionne comme un charme. –

0

Ajouter un filtre orderBy:

<tr ng-repeat="entry in entries orderBy : 'failed' "> 
    <td style="width: 10%;"> 
     <i ng-if="!entry.failed" class="fa fa-check" style="color: green;"></i> 
     <i ng-if="entry.failed" class="fa fa-times" style="color: red;"></i> 
    </td> 
</tr> 
+0

'orderBy' avec dataTables n'est pas une bonne idée. Au mieux, vous finirez dans des lignes rendues visuellement différentes de la structure de ligne interne sous-jacente. Ce serait la bonne réponse sur une table DOM sans dataTables. – davidkonrad