Javascript AngularJS对象作为typeahead的选定输入
我有一个输入字段,用于自动完成并通过执行http请求动态填充。我得到这样的对象,例如:Javascript AngularJS对象作为typeahead的选定输入,javascript,html,angularjs,Javascript,Html,Angularjs,我有一个输入字段,用于自动完成并通过执行http请求动态填充。我得到这样的对象,例如: { id:1, name:'ABC' } 我想为最终用户显示名称,但稍后当选择输入时,我想在进一步处理中将其用作id。但是ng model将我的对象转换为字符串,我失去了id 一般来说,所有这些都可以正常工作,但我的问题是,当用户选择某个内容时,比如字符串“ABC”,它对我来说毫无意义,除非我可以将它绑定到API返回的“ID”。只有知道ID,我才能继续以后的处理 您能帮我弄清楚,我应该怎么做才能
{
id:1,
name:'ABC'
}
我想为最终用户显示名称
,但稍后当选择输入时,我想在进一步处理中将其用作id
。但是ng model
将我的对象转换为字符串,我失去了id
一般来说,所有这些都可以正常工作,但我的问题是,当用户选择某个内容时,比如字符串“ABC”,它对我来说毫无意义,除非我可以将它绑定到API返回的“ID”。只有知道ID,我才能继续以后的处理
您能帮我弄清楚,我应该怎么做才能从选定的中捕获作为对象,但仍然向用户显示友好的文本
谢谢你的帮助
代码:
HTML:
我对您的问题只有一个快速的了解:您是否尝试了ng model=“fromSelected.name”
和$scope.fromSelected={}
?@mrak,谢谢您的回答。如果我这样做了,那么我的$watch就停止工作了,所以根本没有捕获到任何东西。如何修复$watch侦听器?您仍然可以将$watch与'fromSelected.name'一起使用,这很有效,谢谢!但不幸的是,在输入更改时,除了简单的字符串,我仍然无法捕获任何内容。也许我需要重新考虑一下我的设计。你到底需要那块$1的手表吗?您正在getPlace中解决承诺问题,您还可以在此处设置searchData.setTravelFrom
?我对您的问题只有一个快速的了解:您是否尝试了ng model=“fromSelected.name”
和$scope.fromSelected={}
?@mrak,谢谢您的回答。如果我这样做了,那么我的$watch就停止工作了,所以根本没有捕获到任何东西。如何修复$watch侦听器?您仍然可以将$watch与'fromSelected.name'一起使用,这很有效,谢谢!但不幸的是,在输入更改时,除了简单的字符串,我仍然无法捕获任何内容。也许我需要重新考虑一下我的设计。你到底需要那块$1的手表吗?如果要在getPlace中解析承诺,还可以在此处设置searchData.setTravelFrom
?
<input type="text" ng-model="fromSelected" placeholder="Country, city or airport" typeahead="place.readableName for place in getPlace($viewValue, 'en')" typeahead-loading="loadingLocations" typeahead-no-results="noResults" class="form-control">
app.controller('PlaceController', function($scope, $http, searchData) {
$scope.fromSelected = '';
$scope.toSelected = '';
$scope.$watch('fromSelected', function(newValue, oldValue){
if (newValue !== oldValue) searchData.setTravelFrom(newValue);
});
$scope.$watch('toSelected', function(newValue, oldValue){
if (newValue !== oldValue) searchData.setTravelTo(newValue);
});
// Any function returning a promise object can be used to load values asynchronously
$scope.getPlace = function(term, locale) {
return $http.get('http://localhost:8080/api/places/search', {
params: {
term: term,
locale: locale
}
}).then(function(response){
return response.data.map(function(item){
return {
'id': item.id,
'name': item.name,
'readableName': item.name + ' (' + item.id + ')'
};
});
});
};
});