Я предполагаю, что это должна быть общая картина, как люди справляются с этим, но я удивлен, почему я не могу найти что-либо в Интернете.
Допустим, у меня есть массив объектов, и я хочу отображать эти объекты для клиента в окне typeahead. Когда клиент выбирает что-то, я хочу запомнить выбор клиента и продолжить процесс.
Проблема: все элементы отображаются в читаемом для пользователя формате - item.name
(Лондон, Лиссабон, Манчестер). Когда клиент выбирает что-то, моя ng-model
fromSelected
равна только имени строки города, что для меня ничего не значит, потому что мне все еще нужен id
для дальнейшего обработка.
Не могли бы вы предложить, как я могу сделать fromSelected
равным объекту, а не строке, но в то же время предоставлять дружественный вывод пользователю?
var app = angular.module("fly");
app.controller('PlaceController', function($scope) {
$scope.fromSelected ='';
$scope.getPlace = function() {
var items = []
items.push({
'id': 1,
'name': London
});
items.push({
'id': 2,
'name': Lisbon
});
return items;
};
});
HTML:
<input type="text" ng-model="fromSelected" placeholder="Country, city or airport" typeahead="place.name for place in getPlace()" typeahead-loading="loadingLocations" typeahead-no-results="noResults" class="form-control">
Дикий козел,
ваше предложение typeahead может сделать это для вас. как item as item.name for item in data | filter:$viewValue
item as item.name for item in data | filter:$viewValue
Это в основном говорит вашему typeahead, чтобы показать ваш item.name
, но вернуть объект item
в модель
Этот плунжер поможет вам сделать это
$viewValue
как в документации, является фактическим значением строки в представлении. Он передает фильтру значение представления, чтобы он мог фильтровать ваши результаты. Вы пытались удалить это? Каков был результат?
fromSelected
будет иметьplace
, выбранное object..you может просто сделатьfromSelected.id