属性 'map' 在初始化之前使用。 (Google 中的地图 Angular)

Property 'map' is used before its initialization. (Google Maps in Angular)

我正在 angular 网页中实现 google maps,但出现此错误(该应用程序仍然有效)

编辑: 只是为了澄清,地图有效,标记也有效,我只是在我的 Visual studio 代码中发现错误,并且在我检查网页时没有实现一个方法(这是地图未初始化的异常)

ERROR in src/app/app.component.ts:29:15 - error TS2729: Property 'map' is used before its initialization.

29 map: this.map,
~~~

src/app/app.component.ts:15:3 15 map: google.maps.Map;
~~~ 'map' is declared here. src/app/app.component.ts:36:15 - error TS2729: Property 'map' is used before its initialization.

36 map: this.map,
~~~

src/app/app.component.ts:15:3
15 map: google.maps.Map; ~~~
'map' is declared here.

我的应用程序component.ts

    import { Component, AfterViewInit, ViewChild, ElementRef } from '@angular/core';
        
    @Component({
      selector: 'app-root',
      templateUrl: './app.component.html',
      styleUrls: ['./app.component.css']
    
    })
    export class AppComponent implements AfterViewInit  {
      title = 'maps-v1';
      @ViewChild('mapContainer', {static: false}) gmap: ElementRef;
      map: google.maps.Map;
      lat = 37.37;
      lng = -122.04;
      coordinates = new google.maps.LatLng(this.lat, this.lng);
    
    
      mapOptions: google.maps.MapOptions = {
        center: this.coordinates,
        zoom: 12,
        gestureHandling:"cooperative",
      };
    
      marker = new google.maps.Marker({
        position: this.coordinates,
        map: this.map,
        title:"Start"
      });
    
      mark2=new google.maps.Marker({
        label: "TEST",
        position:{lat:37.37,lng:-122.03},
        map: this.map,
        title:"TESTERSZ"
    
      });
    
      ngAfterViewInit(){
        this.mapInitializer();
        throw new Error('Method not implemented.');
        
      }
      
    
      mapInitializer() {
        this.map = new google.maps.Map(this.gmap.nativeElement, 
        this.mapOptions);
        this.marker.setMap(this.map);
        this.mark2.setMap(this.map);
    
       }
       
    }

如有任何帮助,我们将不胜感激

你必须等待地图初始化,所以像下面这样改变它

 mapInitializer() {
    setTimeout(() => {
        this.map = new google.maps.Map(this.gmap.nativeElement, this.mapOptions);
    }, 500);
    this.marker.setMap(this.map);
    this.mark2.setMap(this.map);

 }

错误是因为在 afterViewInit

中初始化地图之前首先初始化了标记对象

解决方案是将标记初始化移动到 mapInitializer() 并将它们放在 this.map = new google.maps 语句之后。

mapInitializer() {
  this.map = new google.maps.Map(this.gmap.nativeElement, this.mapOptions);

  const marker = new google.maps.Marker({
    position: this.coordinates,
    map: this.map, // this.map will contain the map object here
    title:"Start"
  });

  const mark2 = new google.maps.Marker({
    label: "TEST",
    position:{lat:37.37,lng:-122.03},
    map: this.map,
    title:"TESTERSZ"
  });

  marker.setMap(this.map);
  mark2.setMap(this.map);
}