【问题标题】:Angular - Google places directive isn't being triggered when the input value changesAngular - 输入值更改时不会触发 Google Places 指令
【发布时间】:2017-10-10 04:16:54
【问题描述】:

我正在尝试编写一个 google place 指令,因为所有完成的指令似乎都不能很好地工作,或者代码库非常可怕。

所以这是我的尝试,它是干净的,但是当用户键入内容时它没有激活:

@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);
    });
  }
}

然后我像这样使用它:

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

但是当我输入输入时,自动完成没有触发,我可能遗漏了一些简单的东西,但我不知道那可能是什么。也许我必须以某种方式手动收听输入然后触发搜索?

【问题讨论】:

    标签: angular typescript google-places-api angular2-directives


    【解决方案1】:

    由于谷歌地图事件在角度区域外触发,您需要在角度区域内运行回调:

    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
    });
    

    另见

    【讨论】:

    • 不起作用,问题是place_change 根本没有触发。所以就好像它无法以某种方式读取输入的值。
    • 它似乎确实有效,似乎下拉菜单隐藏在我页面上的其他一些元素后面,这很奇怪。我想这个问题已经解决了:)
    猜你喜欢
    • 2019-08-02
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2023-03-15
    • 2016-04-06
    • 1970-01-01
    • 2016-10-02
    相关资源
    最近更新 更多