我在我的网站上使用Google Places API进行自动推荐,in First go工作正常,但当我刷新特定角度组件的页面时,它显示错误,即
ReferenceError: google is not defined
我已经搜索了很多网站,但没有一个解决方案有效。我尝试在index.html
的脚本标签中添加async
和defer
,但不起的作用
寄存器组件.ts
declare var google: any;
export class RegisterComponent implements AfterViewInit {
constructor() { }
ngAfterViewInit() {
const input = <HTMLInputElement>document.getElementById('googlePlaces');
const autocomplete = new google.maps.places.Autocomplete(input, { types: ['geocode'] });
google.maps.event.addListener(autocomplete, 'place_changed', () => {
this.place = autocomplete.getPlace();
})
}
}
register.component.html
<input id="googlePlaces" type="text" class="input-custom" formControlName="location" placeholder="Enter Place">
我已经在主index.html
文件中添加了带有有效API密钥的脚本,这似乎可以在第一次使用时使用
您没有使用正确的方式在角度中初始化谷歌地图
看看这个代码,你会在谷歌上找到你的快乐:)
this._mapsAPILoader.load().then(() => {
let autocomplete = new google.maps.places.Autocomplete(document.getElementById('autocompleteInput'), {});
google.maps.event.addListener(autocomplete, 'place_changed', () => {
this._ngZone.run(() => {
const place = autocomplete.getPlace();
...
});
...
});
mapsAPILoader和ngZone必须添加到构造函数中
constructor(
private _mapsAPILoader: MapsAPILoader,
private _ngZone: NgZone) { }
如果有帮助,请毫不犹豫地投票;)
您可以尝试:
let listen;
this._mapsAPILoader.load().then(() => {
let autocomplete = new google.maps.places.Autocomplete(document.getElementById('autocompleteInput'), {});
listen = google.maps.event.addListener(autocomplete, 'place_changed', () => {
this._ngZone.run(() => {
const place = autocomplete.getPlace();
...
});
...
});
...
google.maps.event.removeListener(listen); // then you can reload autocomplete without problens