Angular UI — выберите limitTo и предзагрузку

Я использую Angular UI-Select для поиска, но производительность падает, когда коллекция становится все длиннее и длиннее.

Чтобы преодолеть эту проблему, я поставил фильтр limitTo (15 элементов) на свой repeat, это работоспособный вариант, но проблема, с которой я сейчас сталкиваюсь, заключается в том, что когда я загружаю страницу и значение внутри моего ng-model выходит за пределы первого, скажем, 15 элементов внутри мой повтор, я закончу с пустым выпадающим списком. Я знаю, что это проблема, и есть открытые вопросы по этому поводу на github, но я надеюсь, что кто-то может пролить свет на это или может сказать мне работоспособное решение для этого... Если это означает изменить javascript UI-Select I готов рискнуть, потому что у меня нет идеи, что команда UI-Select скоро это исправит...

Я использую версию UI-Select: 0.12.1


person Jordy van Eijk    schedule 26.01.2016    source источник


Ответы (2)


Через пару дней перепробовал кучу разных способов, чтобы моя предзагрузка с лимитом работала. Я решил создать свой собственный фильтр limitTo.

Этот фильтр делает то же самое, что и фильтр angular limitTo, но я передам ему модель, чтобы я мог искать этот элемент в списке всех элементов и объединять его с элементами, которые выполняются стандартным пределом для.. .

Я думаю, это довольно аккуратно.

person Jordy van Eijk    schedule 29.01.2016
comment
Вы можете поделиться своим пользовательским фильтром? - person Henry Zou; 19.02.2016

На всякий случай, если кто-то все еще ищет решение.
Этот настраиваемый фильтр limitTo удаляет выбранные элементы перед ограничением списка. Это упрощенная версия углового limitTo (это просто предполагает, что вы передаете правильные значения).

angular
  .module('app')
  .filter('myLimitTo', myLimitToFilter);


/*========================================
 =                 filter                =
 ========================================*/
function myLimitToFilter() {
  return function (input, limit, selectedItems) {

    if (!_.isArray(input) && !_.isString(input)) {
      return input;
    }

    if (limit >= 0) {
      return input.filter(filterOutExisting).slice(0, limit);
    } else {
      return input.slice(limit, input.length);
    }

    function filterOutExisting(item) {
      return !_.includes(selectedItems, item);
    }
  };
}

person Henry Zou    schedule 19.02.2016
comment
это использование углового подчеркивания или что-то в этом роде? Я получаю ReferenceError: _ не определено при попытке использовать ваш фильтр - person lonewolf217; 29.03.2017