Я заметил, что Angular -UI прекратил свою директиву UI-Select2 в пользу нового UI-Select (с несколькими темами - select2, bootstrap, selectize).
Он выглядит следующим образом:
<ui-select multiple ng-model="multipleDemo.colors" theme="select2" ng-disabled="disabled" style="width: 300px;">
<ui-select-match placeholder="Select colors...">{{$item}}</ui-select-match>
<ui-select-choices repeat="color in availableColors | filter:$select.search">
{{color}}
</ui-select-choices>
</ui-select>
<p>Selected: {{multipleDemo.colors}}</p>
Изначально мой selectbox должен быть пустым, но готов к набору символов, который представляет собой строку длиной не менее 4 символов, а затем вызывает вызов API для получения списка предлагаемых значений, которые должны заполнять поле. Затем будет выбрано одно значение, и поиск необходимо повторить по мере необходимости.
Сначала я пробовал $watch
с ng-model
, который в этом случае multipleDemo.colors
(используя этот пример из демонстраций). API-вызов никогда не возникал, и тогда я понял, почему. Фактическая модель не изменяется вообще, потому что она изменяется только при выборе (мой selectbox пуст, поэтому ничего нельзя выбрать).
Мое заключение состоит в том, что я должен (быть в состоянии) $watch
добавлен как фильтр, а именно filter: $select.search
.
Кто-нибудь знает, как я должен использовать его в своем контроллере?
Это:
$scope.$watch('$select.search', function(newVal){
alert(newVal);
});
не работает.
EDIT: Для справки обратитесь к этому краткому обсуждению: Можно ли добавить поддержку пользовательской функции запроса, например select2?
ИЗМЕНИТЬ 2:
Я решил это, используя $emit
изнутри директивы, чтобы значение теперь доступно в моем контроллере. Но теперь я хотел бы знать, как я могу переопределить эту часть директивы, поэтому сама директива может быть оставлена нетронутой, чтобы она не прерывалась в будущих обновлениях?