Предел цикла дайджеста Angularjs достигнут при попытке вручную добавить что-либо к результатам поиска в пользовательском фильтре с помощью ui-select - PullRequest
0 голосов
/ 22 февраля 2019

У меня есть следующий html:

<ui-select ng-model="model.selectItem">
  <ui-select-match">
    <span ng-bind="$select.selected.code + ' - ' + $select.selected.description">
    </span>
  </ui-select-match>
  <ui-select-choices repeat="item in (items | customFilter: $select.search)">
   <span ng-bind="item.code"></span> - <span ng-bind="item.description"></span>
   </ui-select-choices>
 </ui-select>

со следующим настраиваемым фильтром:

angular
  .module('app').filter('customFilter', function () {
    return function (items, searchTerm) {
        var filtered = [];

        if (!searchTerm.length) {
          return items;
        } else {
          _.forEach(items, function(item){
            if (_.includes(item.description, searchTerm)) {
              filtered.push(item);
            }
          })
          filtered.push({code: '45345345345', description: 'Ever Present Option No Matter What Your Search Is'})
        }
        return filtered;
    };
});

Каждый раз, когда я что-то ищу, он бомбит и говорит 10 $digest() iterations reached.Я понимаю угловые циклы и циклы дайджеста, или я так подумал - я пытался добавить _.cloneDeep массива items, поскольку он входит в filter, но безрезультатно.Я попытался вставить track by в свой повтор, но безрезультатно.

Проблема заключается в том, что этот жестко закодированный объект выдвигается: filtered.push({code: '45345345345', description: 'Ever Present Option No Matter What Your Search Is'})

Этот код прекрасно работает без этой строки.К сожалению, это странное требование.Я должен иметь эту опцию, доступную для пользователя, независимо от того, что поисковый термин.Даже если нет результатов, он должен вернуть эту опцию.Если поискового термина нет вообще, в раскрывающемся списке необходимо заполнить все результаты + этот специальный.Возможно, это проблема с ui-select? Чего мне не хватает?Спасибо.

PS.В качестве альтернативы мне было бы хорошо с нативным решением ui-select, но я взламывал его часами безрезультатно.Они поддерживают вещи, близкие к этому, но не совсем то, что мне нужно.

...