У меня есть этот код
<input ng-model="attribute.name" typeahead="property as property.name for property in MyObject | filter:{ paramName:$viewValue }">
MyObject - это
{ name : 'A',
desc : 'A description'
}
attribute.name должно оставаться простой строкой. Однако, с приведенным выше кодом, attribute.name становится объектом, который я не хочу. Поэтому я изменил код на
<input ng-model="attribute.name" typeahead="property.name as property.name for property in MyObject | filter:{ paramName:$viewValue }">
Все отлично работает, пока мне не понадобится отображать "desc" key. Это не должно быть в ng-модели, но пока я могу это сделать, это было бы хорошо. Мне не нужна двусторонняя привязка для "desc", потому что я хочу, чтобы данные были доступны для редактирования в свободной форме.
Теперь, когда я возвращаю свойство property.name, которое больше не является объектом, как мне получить доступ к клавише "desc"?
Посмотрите на последний пример на странице typeahead
: https://angular-ui.github.io/bootstrap/#/typeahead.
Мне нужно:
1 - Измените свое выражение, чтобы объект завершился, но выбрав только требуемое свойство. Кроме того, используя ngModel.$viewValue
чтобы предоставить строку для фильтрации. Так:
<input ng-model="attribute.name"
typeahead="property as property.name for property in MyObject | filter:{name: $viewValue}">
2 - Определите шаблон для отображения результатов. Вам необходимо настроить шаблон в этом шаблоне, следуя правилам, чтобы показать результаты правильно. Одним из примеров этого является:
<script type="text/ng-template" id="resultPattern.html">
<div>
<span ng-bind="match.name | typeaheadHighlight:query"></span><br>
<small ng-bind="match.desc"></small>
</div>
</script>
3 - Конечный тег input
будет:
<input ng-model="attribute.name"
typeahead="property as property.name for property in MyObject | filter:{name: $viewValue}" typeahead-template-url="resultPattern.html">
Вы были правы, я ошибся на шаге 3:
<input ng-model="attribute.name"
typeahead="property.name as property for property in MyObject | filter:{name: $viewValue}" typeahead-template-url="resultPattern.html">
Вот Plunkr: http://plnkr.co/edit/pcjV40KxkBFdyIM3L0M4?p=preview
Я обновил Plunkr с помощью функции обратного вызова, используемой для обработки выбора после него: http://plnkr.co/edit/pcjV40KxkBFdyIM3L0M4?p=preview
Кроме того, есть форматер для ngModel
, который вы можете использовать, чтобы выбрать, какой элемент отображать после выбора, позволяя тому же ngModel
всю информацию.