2016-12-01 2 views
0

Когда я выбираю адрес карты Google для автозаполнения результата из раскрывающегося списка, он не переходит к моему родительскому компоненту, но это происходит, когда я вручную вводим адрес.Выбор выпадающего списка автозаполнения не запускается ngModelChange

Начну печатать, и он передает информацию, и как только я выбираю адрес, который он заполняет для меня остальным, но не передает эти данные, даже если он отображается в поле ввода.

Я использую этот вход (в шаблоне ребенка), чтобы получить адреса с Google Map DIV:

<input 
    [(ngModel)]="address" 
    (ngModelChange)="addressChange.emit($event)" 
    id="pac-input" 
    name='address' 
    class="mapControls" 
    type="text" 
    placeholder="Enter Address" 
> 

в моем детском компоненте:

@Component({ 
    selector: 'gmap', 
}) 

export class gMap{ 
    @Input() address; 
    @Output() addressChange = new EventEmitter(); 
} 

в моем родительском шаблоне:

<gmap [(address)]="address"></gmap> 

и родительский компонент:

address: string; 

Очевидно, что есть еще код, но это важный материал, который я думаю. Кто-нибудь знает, как это сделать, когда я выбираю результат автозаполнения из раскрывающегося списка, он вызывает ngModelChange с данными, выбранными из выделения?

ответ

1

Я вроде установил это, я сделал это:

Так, так как мы используем машинописный я изменил Google, все

function() 

в

() => 

то, что в этих функциях кода карты google

searchBox.addListener('place_changed',() => { 
    places.forEach((place) => { 

я назвал эмиттер

this.addressChange.emit(place.formatted_address); 

есть огромная задержка, иногда, как 20 секунд, но это работает!

Кто-нибудь знает, почему существует несколько секунд задержки между тем, когда я выбираю из выпадающего списка, и эмиттер отключается? Я бы очень хотел удалить эту задержку

Если вы используете объект обещания, тогда ответ будет очень быстрым.

return new Promise((resolve, reject) =>{ 
    autocomplete.addListener('place_changed',() => { 
    var place = autocomplete.getPlace(); 
    console.log("place "+place); 
    resolve(place); 
    }); 
})