AngularJS ищет несколько ключевых слов, используя одно поле

Я новичок в AngularJS. У меня есть 3 поля ввода для ввода до 3 ключевых слов для одного сообщения:

<input type="text" ng-model="Keyword1"></input>
<input type="text" ng-model="Keyword2"></input>
<input type="text" ng-model="Keyword3"></input>

Я показываю сообщения, используя ng-repeat:

ng-repeat="post in posts | filter: searchKeyword"
...

и поиск по:

Search Keyword: <input ng-model="searchKeyword.Keyword1">

Как видите, в настоящее время выполняется поиск только по первому ключевому слову каждого сообщения. Как я могу иметь только одно поле поиска, которое выполняет поиск по всем трем ключевым словам сообщения? Я знаю, что не могу просто сделать

<input ng-model="searchKeyword.Keyword1.Keyword2.Keyword3">

Спасибо!


person OneMoreQuestion    schedule 04.08.2015    source источник


Ответы (2)


Не уверен, что намерение состоит в том, чтобы вернуть все сообщения, которые соответствуют хотя бы одному ключевому слову, или все сообщения, которые соответствуют всем ключевым словам. Вот как вы можете создать собственный фильтр для соответствия хотя бы одному слову:

<div ng-controller="theController">
  <input ng-model="inputText"/>
  <!-- Use a custom filter to determine which posts should be visible -->
  <ul>
    <li ng-repeat="post in posts | filter:myFilter">{{post}}</li>
  </ul>
</div>

angular.module('theApp', [])
  .controller('theController', ['$scope', function($scope) {
    $scope.inputText = 'test';
    $scope.posts = [
      'test test2;lksdf asdf one asdf poo',
      'arm test test2 asdf',
      'test head arm chest'
    ];

    $scope.myFilter = function(post) {
      // default to no match
      var isMatch = false;

      if ($scope.inputText) {
        // split the input by space
        var parts = $scope.inputText.split(' ');

        // iterate each of the words that was entered
        parts.forEach(function(part) {
          // if the word is found in the post, a set the flag to return it.
          if (new RegExp(part).test(post)) {
            isMatch = true;
          }
        });
      } else {
        // if nothing is entered, return all posts
        isMatch = true;
      }

      return isMatch;
    };
  }]);

А вот и планкр: http://plnkr.co/edit/d17dZDrlhY2KIfWCbKyZ?p=preview

ПРИМЕЧАНИЕ. Это решение не ограничивает количество ключевых слов до 3. Можно ввести любое количество ключевых слов, разделяя их пробелом. Если ничего не введено (или только пробелы), возвращается все.

person GPicazo    schedule 04.08.2015
comment
Как вы поживаете, когда это объект ключей? - person JohnAndrews; 20.02.2019

Вот что я буду делать

  1. написать собственный фильтр (https://docs.angularjs.org/guide/filter)
  2. в фильтре разделите ввод пробелом (что даст вам отдельные слова)
  3. искать все слова во вводе по одному
person srjt    schedule 04.08.2015