我想将google.maps.places.Autocomplete
附加到ion-input
,但是 Ionic2 ion-input
包含<input>
元素和我无法弄清楚如何访问它。
我已尝试创建指令并使用传入的ElementRef
import {Directive, ElementRef, Input} from 'angular2/core';
@Directive({
selector: '[location-picker]'
})
export class LocationPicker {
constructor(el: ElementRef) {
console.log(el.nativeElement);
}
}
但nativeElement
返回包装的输入。
<ion-input location-picker="">
<input class="text-input ng-valid ng-dirty ng-touched" type="text" placeholder="" aria-labelledby="lbl-6" location-picker="" autocomplete="off" autocorrect="off">
<!--template bindings={}-->
<!--template bindings={}-->
<!--template bindings={}-->
</ion-input>
我还尝试创建类似于this的自定义组件,并将Searchbar
切换为TextInput
,但TextInput doesn't have
。inputElement`。
欢迎任何想法。
谢谢!
答案 0 :(得分:4)
不确定这是你要找的东西(不懂离子)
<ion-input location-picker="">
<input #myInput class="text-input ng-valid ng-dirty ng-touched" type="text" placeholder="" aria-labelledby="lbl-6" location-picker="" autocomplete="off" autocorrect="off">
<!--template bindings={}-->
<!--template bindings={}-->
<!--template bindings={}-->
</ion-input>
@ViewChild('myInput') input;
ngAfterViewInit() {
console.log(this.input.nativeElement.value);
}
另见angular 2 / typescript : get hold of an element in the template
答案 1 :(得分:0)
有同样的问题。接受的答案和下面的评论的组合似乎为我解决了。
将此功能添加到我的指令似乎是这样做的。我正在使用Typescript和 googlemaps的打字定义在此处找到:https://github.com/DefinitelyTyped/DefinitelyTyped/blob/master/googlemaps/google.maps.d.ts
ngAfterViewInit() {
var input: HTMLInputElement = <HTMLInputElement>this._el.querySelector("input");
this.autocomplete = new google.maps.places.Autocomplete(input, {});
google.maps.event.addListener(this.autocomplete, 'place_changed', () => {
var place: google.maps.places.PlaceResult = this.autocomplete.getPlace();
this.invokeEvent(place);
});
}
答案 2 :(得分:0)
我这样解决了:
<ion-item>
<ion-label>Search your city</ion-label>
<ion-input formControlName="placeAutofill" id="googlePlaces" required></ion-input>
</ion-item>
在我的代码中:
ionViewWillEnter() {
// Google Places API auto complete
let input = document.getElementById('googlePlaces').getElementsByTagName('input')[0];
let autocomplete = new google.maps.places.Autocomplete(input, {types: ['geocode']});
google.maps.event.addListener(autocomplete, 'place_changed', () => {
// retrieve the place object for your use
let place = autocomplete.getPlace();
});
}