Строгий поиск в умной таблице AngularJS

Smart-таблица имеет встроенный функционал для поиска по столбцам (st-search). Можно ли выполнить строгий поиск по словам, да с точным совпадением? Например: если у меня есть такая таблица: id, name, status:

  • 1, Джон, обратись куда-нибудь
  • 2, Джонни, другой адрес
  • 3, Джейн, адрес

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


person max_s    schedule 04.03.2015    source источник


Ответы (3)


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

<table st-set-filter="myFilter" st-table="myData">

Затем вы просто создаете угловой фильтр.

angular.module('myApp').filter('myFilter',
  function($filter) {
    return function(input, predicate) {
      return $filter('filter')(input, predicate, true);
    };
  }
);

В моем случае мне нужно было только выполнять строгий поиск время от времени, поэтому я добавил дополнительную логику в фильтр, но это поможет вам выполнять строгий поиск все время.

Моя больше похожа на эту:

angular.module('myApp').filter('myFilter',
  function($filter) {
    return function(input, predicate) {
      var strict = false;
      if (predicate) { // some conditional if I want strict
        strict = true;
      }
      return $filter('filter')(input, predicate, strict);
    };
  }
);
person elthrasher    schedule 12.04.2015

Старый, но по-прежнему актуальный. Если у вас есть несколько полей ввода, но вы хотите, чтобы только некоторые из них были строгими.
@elthrasher подал мне идею.

angular.module('app').filter('myStrictFilter', function($filter) {
    return function(input, predicate) {
        var response = input,
            strict = false,
            custom_predicate = {};
        // some input fields must be strict
        angular.forEach(predicate, function(value, key) {
            custom_predicate = {};
            custom_predicate[key] = value;
            strict = false;
            if (key === 'completion_status') { // strict it is.
                strict = true;
            }
            response = $filter('filter')(response, custom_predicate, strict);
        });
        return response;
    };
});
person LatvjuAvs    schedule 12.06.2019

Yo должен использовать строгий компаратор:

<input type="text" ng-model="query" />
<ul>
    <li data-ng-repeat="user in users | filter:{ name:query }:true">
      {{ user.id }}, {{ user.name }}, {{ user.address }}
    </li>
</ul>

Компаратор, который используется для определения того, следует ли считать совпадением ожидаемое значение (из выражения фильтра) и фактическое значение (из объекта в массиве).

Может быть одним из:

функция (фактическое, ожидаемое): функция получает значение объекта и значение предиката для сравнения и должна возвращать значение true, если оба значения следует считать равными.

true: сокращение для функции (фактическое, ожидаемое) { return angular.equals(фактическое, ожидаемое)}. По сути, это строгое сравнение ожидаемого и фактического.

false|undefined: сокращение для функции, которая будет искать совпадение подстроки без учета регистра.

Примитивные значения преобразуются в строки. Объекты не сравниваются с примитивами, если они не имеют специального метода toString (например, объекты Date).

person Jesús    schedule 04.03.2015
comment
Спасибо! Хотя я хотел бы использовать функцию поиска смарт-таблицы, поскольку я использую ее плагин канала (lorenzofox3.github.io/smart-table-website/#section-pipe). Есть мысли по этому поводу? - person max_s; 06.03.2015