2015-03-01 4 views
1

Смарт-таблица имеет встроенную функциональность для поиска по всем столбцам (st-search) или через один желаемый столбец (st-search = "'firstName'). поиск в нескольких столбцов (не все) примера: если у меня есть таблица вроде этого: имя, псевдоним, адрес с такими данными:Интеллектуальный поиск AngularJS в нескольких столбцах

  1. Джон, JJ, некоторый адрес
  2. Стив, Джон, также адрес
  3. Jane, Jane, John-village

и выполните поиск для «John», должны быть только первые две колонки. Возможно ли это?

+0

Я предложил способ решить проблему. Взгляните на ответ! – floatingpurr

ответ

1

Нео, обходной путь, чтобы создать собственную директиву, которая требует контроллера таблицы и вызов его апите дважды (например, поиск добавляется)

directive('stSearch', ['$timeout', function ($timeout) { 
    return { 
     require: '^stTable', 
     scope: { 
      predicate: '=?stSearch' 
     }, 
     link: function (scope, element, attr, ctrl) { 
      var tableCtrl = ctrl; 

      // view -> table state 
      element.bind('input', function (evt) { 
       evt = evt.originalEvent || evt; 
       tableCtrl.search(evt.target.value, 'column1'); 
       tableCtrl.search(evt.target.value, 'column2'); 
      }); 
     } 
    }; 
}]); 

вы найдете более подробную информацию в stSearch direcitve

+1

Я играл с частью кода, который вы предлагали, но похоже, что он фильтрует и не выполняет поиск по нескольким столбцам. Или, может быть, мне что-то не хватает :) Взгляните на мой [plunker] (http://plnkr.co/edit/j5QzGBExnfaCQdYupdk1?p=preview) То, что я ожидаю в примере, это получить результат с тремя строками (1, 4; 4,1 и 1,1) при поиске «1» в обеих колонках. – tadasp

+0

Я проверил этот код в Angular 1.5.x и не смог выполнить поиск по нескольким полям. – mbokil

2

У меня есть аналогичная проблема, и я решил использовать подсказки в этом post.

Смарт Таблица док говорит:

stSetFilter заменяет фильтр, используемый при поиске через смарт таблицы. Когда поведение по умолчанию для stSearch не соответствует вашим требованиям , как в выборе, где одна запись является подстрокой другого, использует пользовательский фильтр для достижения ваших целей.

и:

Обратите внимание, что st-safe-src требуется для выбора, чтобы правильно отображать все различные элементы в коллекции. Если это будет опущено, выбор будет содержать только значения из элементов, видимых в таблице, а также , затронутых пейджингом.

Вы можете объявить свой собственный фильтр внутри элемента таблицы в HTML:

<table ... st-set-filter="myCustomFilter" class="table table-striped"> 

... и ваш может настроить фильтр (в приложении) через функцию предиката. Она могла бы работать таким образом:

// filter method, creating `myCustomFilter` a globally 
// available filter in our module 
.filter('myCustomFilter', ['$filter', function($filter) { 

    // function that's invoked each time Angular runs $digest() 
    return function(input, predicate) { 
    searchValue = predicate['$']; 
    //console.log(searchValue); 
    var customPredicate = function(value, index, array) { 
     console.log(value); 

     // if filter has no value, return true for each element of the input array 
     if (typeof searchValue === 'undefined') { 
     return true; 
     } 

     var p0 = value['name'].toLowerCase().indexOf(searchValue.toLowerCase()); 
     var p1 = value['nickname'].toLowerCase().indexOf(searchValue.toLowerCase()); 
     if (p0 > -1 || p1 > -1) { 
     // return true to include the row in filtered resultset 
     return true; 
     } else { 
     // return false to exclude the row from filtered resultset 
     return false; 
     } 
    } 

    //console.log(customPredicate); 
    return $filter('filter')(input, customPredicate, false); 
    } 
}]) 

Я сделал эту маленькую plnkr, чтобы увидеть фильтр в действии

-1

попробовать е-поиска = "{{FirstName + прозвище}}". Я пробовал использовать смарт-таблицу v2.1.6 и, похоже, работает.

+0

Этот ответ неправильный. Это похоже на st-поиск без параметров. SO, который вы ищете во всем. – amdev

+0

Я пробовал это решение. Как отмечалось ранее, он возвращает все. Было бы неплохо, но в настоящее время это ничего не делает в Smart Table, кроме поиска всех. – mbokil

Смежные вопросы