Angular-UI: Форсировать результаты Typeahead

У меня есть текстовое поле, в котором используется функция опережения ввода AngularUI. Это выглядит так:

<input typeahead="eye for eye in autocomplete[column] | filter:$viewValue">

Я хотел бы заставить пользователя выбрать вариант из созданного списка. Если они напечатают что-то, чего нет в списке точно так, как оно появляется, при размытии (щелкнув за пределами текстового поля), я бы хотел, чтобы значение текстового поля было сброшено до исходного значения.

Является ли эта функциональность частью директивы typeahead или мне нужно будет ее расширить? Я искал около 10 минут в Google и stackoverflow, но не смог найти подходящей документации.

Может ли кто-нибудь указать мне в правильном направлении, чтобы выполнить это?


person Josue Espinosa    schedule 10.09.2014    source источник
comment
Есть второй аргумент для фильтрации, которая включает точные совпадения, может быть, это может заставить его работать? filter:$viewValue:true   -  person jpmorin    schedule 11.09.2014
comment
Хм, это сломало шрифт на моей странице. Требуется ли определенная версия Angular?   -  person Josue Espinosa    schedule 11.09.2014
comment
В Ui-Boostrap также есть атрибут для принудительного использования существующих результатов: typeahead-editable="false" (редактируемый с опережением ввода (по умолчанию: true): должен ли он ограничивать значения модели только теми, которые выбраны из всплывающего окна?)   -  person jpmorin    schedule 11.09.2014
comment
Модель становится пустой, если значение неправильное. Я думаю, вам нужно будет сохранить последнее хорошее значение в переменной и привязать событие к размытию и посмотреть, неверно ли текущее значение, если да, то установить текущее значение на последнее хорошее значение.   -  person jpmorin    schedule 11.09.2014
comment
Не выглядит пустым, если значение неверно. См. этот jsfiddle: jsfiddle.net/ZjPWe/60   -  person Josue Espinosa    schedule 11.09.2014
comment
Поля нет, а модель есть по их документации. Не забывайте, что есть $modelValue и $viewValue.   -  person jpmorin    schedule 11.09.2014
comment
Ok. Здесь я нашел более или менее то, что хотел: stackoverflow.com/questions/17856126/ . Однако вы ответили на некоторые вопросы, поэтому, если вы сделаете это ответом, я приму его.   -  person Josue Espinosa    schedule 11.09.2014


Ответы (1)


В плагине есть атрибут для принудительного использования только существующих значений: typeahead-editable="false". Значение по умолчанию — true.

Только $modelValue становится пустым, когда выбрано неправильное значение, и это действительно необходимо, иначе мы не сможем ничего записать. $viewValue остается с последним введенным текстом. Возможно, вы сможете привязать собственное событие размытия к полю, чтобы сбросить $viewValue?

Вот ваш JsFiddle с выбранным отображаемым значением: http://jsfiddle.net/ZjPWe/61/

Вы также можете использовать атрибут typeahead-on-select, который требует обратного вызова при выборе значения, но я не уверен, что он будет работать с typeahead-editable="false", потому что значение не выбирается.

person jpmorin    schedule 10.09.2014