2

完成したものはあまりうまく動作しないか、恐ろしい。だからここ角度 - 入力値が変更されたときにGoogleプレイスのディレクティブがトリガーされない

はきれいである私の試みですが、ときに、ユーザーの種類、何かそれが活性化されていません。

<input formControlName="address" googlePlace (placeChange)="setAddress($event)"> 

しかし、私が入力したときに:私は、このように使用

@Directive({ 
    selector: '[googlePlace]' 
}) 

export class GoogleplaceDirective implements OnInit { 
    @Output() placeChange: EventEmitter<any> = new EventEmitter<any>(); 

    public autocomplete: any; 

    constructor(private elementRef: ElementRef) {} 

    ngOnInit() { 

    this.autocomplete = new google.maps.places.Autocomplete(this.elementRef.nativeElement, {}); 

    google.maps.event.addListener(this.autocomplete, 'place_changed',() => { 

     const place = this.autocomplete.getPlace(); 

     this.placeChange.emit(place); 
    }); 
    } 
} 

オートコンプリートの入力がトリガーされていない場合、私はおそらく単純なものを見逃しているかもしれませんが、それが何であるか把握することはできません。たぶん入力を何とか手動で聞いてから検索をトリガーする必要がありますか?

答えて

1

Googleマップイベントは、あなたが、角度ゾーン内でコールバックを実行する必要があり、角度ゾーンの外に発射されたよう:

constructor(private zone: NgZone) {} 

google.maps.event.addListener(this.autocomplete, 'place_changed',() => { 
    const place = this.autocomplete.getPlace(); 
    this.zone.run(() => this.placeChange.emit(place)); // run inside angular zone 
}); 

も参照してください

+0

が動作しない、問題'place_change'はまったく起動しないということです。つまり、入力値を何とか読み取ることができないようなものです。 – Chrillewoodz

+0

試すhttps://plnkr.co/edit/UzSd0ljXvpHMsEqle1EC?p=preview – yurzui

+0

これはうまくいくようですが、私のページの他の要素の後ろにドロップダウンが隠れているようです。私はこれが解決されたと思います:) – Chrillewoodz