2016-04-10 2 views
0

Я использую Angular ng-table с фильтрацией для тестовой платформы подготовки. Я храню результаты опроса как 0 or 1 за вопрос в БД, но вам необходимо показать их Correct или Incorrect.Добавить условное значение для фильтра

Я могу сделать это с {{q.result == 1 ? 'Correct' : 'Incorrect'}}

Но это также должно применяться к фильтрации, а это означает, пользователь должен иметь возможность вводить «Правильно» и фильтровать все вопросы с q.result = 1.

<tr ng-repeat="q in $data"> 
    <td title="'Correct/Incorrect'" filter="{ result: 'text'}" sortable="'q.result'" ng-class="{correct: q.result == 1, incorrect: q.result == 0}"> 
     {{q.result == 1 ? 'Correct' : 'Incorrect'}} 
    </td> 

Я пробовал изменить filter="{ result: 'text'}, чтобы следовать тройному соглашению выше, но это не работает.

filter="{(result == 1 ? 'Correct' : 'Incorrect') : 'text'}" дает ошибку:

Syntax Error: Token '(' invalid key at column 2 of the expression [{(result == 1 ? 'Correct' : 'Incorrect') : 'text'}] starting at [(result == 1 ? 'Correct' : 'Incorrect') : 'text'}]. 

Я использую директиву:

angular 
    .module('DDE') 
    .directive('results',['$rootScope', 'NgTableParams', function ($rootScope, NgTableParams) { 
     return { 
      restrict: 'AE', 
      scope: {}, 
      transclude: true, 
      templateUrl: '/html/directives/results.html', 
      link: function(scope, elem, attr){ 
       scope.questions = []; 
       /* 
        If user took a new test, show results 
       */ 
       scope.$on('show-results', function(event, args) { 
        scope.setData(args); 
       }); 

       /* 
        Set question data 
       */ 
       scope.setData = function (args) { 
        console.log(args); 
        scope.questions = args; 
        scope.tableParams = new NgTableParams({}, { dataset: args}); 
       }; 
      } 
     } 
}]); 

Console.logging args дает:

enter image description here

+0

Можете ли вы включить часть, в которой вы создаете таблицу в своем контроллере? –

+0

@AlonEitan см. Выше, это директива – Growler

ответ

0

документация этого модуля довольно дерьмовый, это то, как сортировать и фильтровать таблицу

scope.tableParams = new NgTableParams({}, { 
    total: args.length, 
    data: args, 
    getData: function ($defer, params) { 
     var orderedData = params.filter() ? $filter('filter')(scope.questions, params.filter()) : scope.questions; 
     orderedData = params.sorting() ? $filter('orderBy')(orderedData, params.orderBy()) : orderedData; 
     params.total(orderedData.length); 
     $defer.resolve(orderedData); 
    } 
}); 

И вам нужно установить фильтр, используя filter="{ result: 'text'}, а также вводить $filter в вашу директиву.