代码之家  ›  专栏  ›  技术社区  ›  Michael DeRobio

地图框gl。js映射在angular cli项目加载事件中未定义

  •  1
  • Michael DeRobio  · 技术社区  · 7 年前

    <div id="map" style="margin:0; padding:0; position:absolute; top:25px; bottom:0; width:100%;">
    </div>

    这是我的组件代码(app.component.ts):

    import { Component, ViewChild, AfterViewInit, OnInit } from '@angular/core';
    import * as mapboxgl from 'mapbox-gl';
    import { Map } from 'mapbox-gl';
    
    @Component({
      selector: 'app-root',
      templateUrl: './app.component.html',
      styleUrls: ['./app.component.css']
    })
    export class AppComponent implements OnInit {
      @ViewChild("map") map: Map;
      title = 'app';
    
      ngOnInit() {
    
        mapboxgl.accessToken = 'blah';   
    
        this.map = new Map({
          container: 'map',
          style: 'mapbox://styles/mapbox/light-v9',
          zoom: 5,
          center: [-78.880453, 42.897852]
        });
    
        this.map.on('load', this.onLoad);
      }
    
      onLoad(){
        console.log("map is loaded, can I still talk to it?");
    
        this.map.addLayer({
          "id": "points",
          "type": "symbol",
          "source": {
              "type": "geojson",
              "data": {
                  "type": "FeatureCollection",
                  "features": [{
                      "type": "Feature",
                      "geometry": {
                          "type": "Point",
                          "coordinates": [-77.03238901390978, 38.913188059745586]
                      },
                      "properties": {
                          "title": "Mapbox DC",
                          "icon": "monument"
                      }
                  }, {
                      "type": "Feature",
                      "geometry": {
                          "type": "Point",
                          "coordinates": [-122.414, 37.776]
                      },
                      "properties": {
                          "title": "Mapbox SF",
                          "icon": "harbor"
                      }
                  }]
              }
          },
          "layout": {
              "icon-image": "{icon}-15",
              "text-field": "{title}",
              "text-font": ["Open Sans Semibold", "Arial Unicode MS Bold"],
              "text-offset": [0, 0.6],
              "text-anchor": "top"
          }
      });
    
      }
    
    }

    项目位于 https://github.com/derobiom/mapboxAngularCli

    1 回复  |  直到 7 年前
        1
  •  5
  •   yurzui    7 年前

    尝试使用其中一种 bind 方法

    this.map.on('load', this.onLoad.bind(this));
    

    或局部箭头功能

    this.map.on('load', () => this.onLoad());
    

    或实例箭头函数

    load = () => {
      ...
    

    这边 this