Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/444.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript AngularJS对象作为typeahead的选定输入_Javascript_Html_Angularjs - Fatal编程技术网

Javascript AngularJS对象作为typeahead的选定输入

Javascript AngularJS对象作为typeahead的选定输入,javascript,html,angularjs,Javascript,Html,Angularjs,我有一个输入字段,用于自动完成并通过执行http请求动态填充。我得到这样的对象,例如: { id:1, name:'ABC' } 我想为最终用户显示名称,但稍后当选择输入时,我想在进一步处理中将其用作id。但是ng model将我的对象转换为字符串,我失去了id 一般来说,所有这些都可以正常工作,但我的问题是,当用户选择某个内容时,比如字符串“ABC”,它对我来说毫无意义,除非我可以将它绑定到API返回的“ID”。只有知道ID,我才能继续以后的处理 您能帮我弄清楚,我应该怎么做才能

我有一个输入字段,用于自动完成并通过执行http请求动态填充。我得到这样的对象,例如:

{
   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 + ')'
                };
            });
        });
    };

});