代码之家  ›  专栏  ›  技术社区  ›  brohymn

我的服务只在我的NGX传单地图上显示最后一个JSON元素标记

  •  0
  • brohymn  · 技术社区  · 6 年前

    如果我对数据进行硬编码,那么所有标记都会很好地显示出来。如果我评论这句话 this.markers.push(新标记) 把它换成下一个,我得到一个 错误类型错误:无法读取取消定义的属性“push”

    如果我使用 this.markers=[新标记] 最后一个JSON元素只有一个显示为标记。

    我怎么展示 全部的 标记在一处,这是异步的问题吗?

    ngOnInit() {
    
    this._mapService.getMarkers().subscribe(data => {
    
        data.map(a => {
          const lat = a.lat;
          const lng = a.lng;
          const name = a.name;
    
          const newMarker = marker(
            [lat, lng], {
              icon: icon({
                iconSize: [25, 25],
                iconAnchor: [13, 41],
                iconUrl: 'assets/yellow.png',
              })
            }
          );
          newMarker.bindPopup('<p>' + name + '</p>', {autoPan: true});
    
          // this.markers.push(newMarker);
    
          this.markers = [newMarker];
     });
    

    服务

    @Injectable({
      providedIn: 'root'
    })
    export class MapserviceService {
    
      private _markers = '../../assets/markers/markers.json';
    
      constructor(private http: HttpClient) {}
    
      getMarkers(): Observable<any> {
       return this.http.get<any>(this._markers);
      }
    

    JSON数据

    [{
        "name": "Canada",
        "lat": 56.130366,
        "lng": -106.346771
      },
    ...
      {
        "name": "Anguilla",
        "lat": 18.220554,
        "lng": -63.068615
      }
    ]
    

    工作的硬编码数据

      function createIcon2() {
        return icon({
          iconSize: [25, 25],
          iconAnchor: [13, 41],
          iconUrl: 'assets/yellow.png',
        });
      }
    
      this.markers =
        [
          marker([35, -76], { icon: createIcon2() }),
          marker([36, -81], { icon: createIcon2() }),
          marker([37, -88], { icon: createIcon2() }),
          marker([38, -99], { icon: createIcon2() }),
          marker([39, -111], { icon: createIcon2() })
        ];
    
        console.log('working', this.markers); 
    
    1 回复  |  直到 6 年前
        1
  •  2
  •   ghybs    6 年前

    public markers: Marker[]; 声明您的 markers 成员,但不初始化/分配任何内容。

    这个 : Markers[] 部分用于typescript类型声明,但不初始化。

    public markers: Marker[] = [] 将其初始化为一个数组,在该数组上可以使用 push 方法。

    推荐文章