Невозможно назначить значение переменной компонента внутри функции геокодирования - PullRequest
0 голосов
/ 27 декабря 2018
GetLocation(address: string) {
  var geocoder = new google.maps.Geocoder();
  geocoder.geocode({ 'address': address }, (results, status) => {
    if (status == google.maps.GeocoderStatus.OK) {
      this.lat = results[0].geometry.location.lat(); 
      this.lng = results[0].geometry.location.lng();   <== this.lat value is undefined
    }
    else {
      alert("Something went wrong : " + status);
    }
  });
}

Здесь я не могу присвоить значение переменной уровня компонента 'lat' и 'lng' внутри функции геокодирования.К вашему сведению: в объекте местоположения результата есть значения внутри него, но после присвоения значения оно все еще не определено, я не знаю почему?

1 Ответ

0 голосов
/ 28 декабря 2018
import { Component, OnInit, NgZone } from '@angular/core';  <= 1. I have to import NgZone

constructor(private ngZone: NgZone) { }  <= 2. declared it here

ngOnInit() { }

GetLocation(address: string) {
  var geocoder = new google.maps.Geocoder();
  geocoder.geocode({ 'address': address }, (results, status) => this.ngZone.run(() => { <= 3. and used it here
    if (status == google.maps.GeocoderStatus.OK) {
      this.lat = results[0].geometry.location.lat();
      this.lng = results[0].geometry.location.lng();
    }
    else {
      alert("Something went wrong : " + status);
    }
  }));
}

Я нашел решение для этого.Я должен импортировать NgZone из '@ angular / core' и использовать функцию this.ngZone.run () внутри функции обратного вызова, как в 3. подсказка.

...