Поле ввода показывает значение модели вместо метки после выбора

После выбора элемента в раскрывающемся списке ввода в поле ввода отображается значение элемента (теперь значение связанной модели). Как мне использовать метку для входного значения. Есть ли здесь поддержка в директиве typeahead, которую я не вижу?

Мое выражение:

person.id as person.name for person in persons

Я также пытался использовать typeahead-input-formatter, но у него есть только свойство $model (value), а не метка.

Планкер http://plnkr.co/edit/OylBlT5KxNvKtTHac61f?p=preview


person Dog    schedule 02.09.2014    source источник


Ответы (4)


Возможно, я использую typehead с несколько иными намерениями. Я понял, что лучшим подходом было бы привязать тип к свойству мусора (неиспользуемому) и использовать что-то вроде <input ... typeahead-on-select="realBinding = $item.id">

person Dog    schedule 02.09.2014
comment
В дополнение к этому ответу выражение person.id as person.name for person in persons необходимо изменить на person as person.name for person in persons, что означает, что модель, которую мы используем с полем ввода, не та, которая содержит требуемый идентификатор. Нам нужно использовать другую переменную (realBinding, как в этом ответе), чтобы получить идентификатор. - person Binod Kalathil; 15.08.2018

Я попробовал с вашим plnkr

вы можете изменить синтаксис для ввода, как показано ниже

>  <input type="text" ng-model="userId" typeahead="person.name as
> person.name for person in persons | filter : $viewValue" />

typeahead="person.name as person.name for person in persons

изменить person.id на person.name.

это работает, дайте мне знать, если вы все еще сталкиваетесь с проблемой.

person Dilip Tirumala    schedule 02.09.2014
comment
Значение, которое я хочу присвоить своей модели, должно быть person.id. - person Dog; 02.09.2014
comment
@Rob, вот как работает typeahead, если вы укажете typeahead = person.id как person.name для человека в людях. когда вы выполняете поиск с помощью rob, он дает вам поиск на основе ваших имен, но когда вы выбираете элемент, он возвращает значение модели, потому что в синтаксисе person.id вернется к модели. Можете ли вы сообщить мне, по какой причине вам нужен идентификатор? - person Dilip Tirumala; 02.09.2014

Измените свое выражение на person.name as person.name for person in person

Если вам нужно показать имя в раскрывающемся списке вместо идентификатора, а также после выбора имени, в модели вам нужно показать только имя. тогда вы можете использовать это выражение
person.name для человека в лице Здесь вам не нужно определять persion.id в вашем выражении.

person Karan Patyal    schedule 02.09.2014

это не так работает.

Ты можешь это сделать:

<input type="text" ng-model="name" placeholder="start typing..." typeahead-on-select="itemSelected($item, $model, $label)" typeahead="person.name for person in people">

Затем в вашем контроллере определите обратный вызов функции при выборе:

$scope.itemSelected = function(item, model, label){
    $scope.user_id = item.id;
};

По сути, когда вы передаете объекты в typeahead, вы можете выбрать, какое значение отображать в текстовом поле, но не скрытый идентификатор. В отличие от элемента управления select текстовые поля не имеют значения, а метка — только значение.

person Super Engineer    schedule 18.11.2014