如何从Ionic2中的离子输入中获取包裹的输入?

时间:2016-05-01 15:15:29

标签: ionic-framework angular ionic2

我想将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`。

欢迎任何想法。

谢谢!

3 个答案:

答案 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();
   });
}