【问题标题】:Ionic 2: Google Map Custom Controls Not WorkingIonic 2:谷歌地图自定义控件不起作用
【发布时间】:2016-04-26 08:32:45
【问题描述】:

我在 Ionic2 中有一个谷歌地图实现。地图和地理位置工作正常。只有在我尝试在地图中实现自定义控件/按钮后才会出现错误。我点击了这个链接: https://developers.google.com/maps/documentation/javascript/examples/control-custom

这是我的 js 代码(构造函数):

 constructor(navController, platform, app) {
    this.navController = navController;
    this.platform = platform;
    this.app = app;

    platform.ready().then(() => {
    this.initializeMap();
    });
  }

自定义控件:

 CenterControl(controlDiv, map){
    // Set CSS for the control border.
    var controlUI = document.createElement('div');
    controlUI.style.backgroundColor = '#fff';
    controlUI.style.border = '2px solid #fff';
    controlUI.style.borderRadius = '3px';
    controlUI.style.boxShadow = '0 2px 6px rgba(0,0,0,.3)';
    controlUI.style.cursor = 'pointer';
    controlUI.style.marginBottom = '22px';
    controlUI.style.textAlign = 'center';
    controlUI.title = 'Click to recenter the map';
    controlDiv.appendChild(controlUI);

    // Set CSS for the control interior.
    var controlText = document.createElement('div');
    controlText.style.color = 'rgb(25,25,25)';
    controlText.style.fontFamily = 'Roboto,Arial,sans-serif';
    controlText.style.fontSize = '16px';
    controlText.style.lineHeight = '38px';
    controlText.style.paddingLeft = '5px';
    controlText.style.paddingRight = '5px';
    controlText.innerHTML = 'Center Map';
    controlUI.appendChild(controlText);

    // Setup the click event listeners: simply set the map to Chicago.
    controlUI.addEventListener('click', function() {
      map.setCenter(chicago);
    });

  }

地图初始化:

initializeMap() {

    let locationOptions = {timeout: 10000, enableHighAccuracy: true};
    navigator.geolocation.getCurrentPosition(

      (position) => {

        let options = {
          // /new google.maps.LatLng(position.coords.latitude, position.coords.longitude);
          center: new google.maps.LatLng(position.coords.latitude, position.coords.longitude),
          zoom: 16,
          mapTypeId: google.maps.MapTypeId.ROADMAP
        }
        this.map = new google.maps.Map(document.getElementById("map_canvas"), options);

        var centerControlDiv = document.createElement('div');
        var centerControl = new CenterControl(centerControlDiv, options);
        centerControlDiv.index = 1;
    map.controls[google.maps.ControlPosition.TOP_CENTER].push(centerControlDiv);

      },

      (error) => {
        console.log(error);
      }, locationOptions
    );
  }

我的 index.html:

<script src="http://maps.google.com/maps/api/js?key=<MY API KEY>"></script>

给出的错误信息是这样的:

第 87 行指的是:

var centerControl = new CenterControl(centerControlDiv, options);

我无法将“CenterControl(){}”设置为“function CenterControl(){}”,因为在这种情况下会遇到语法错误。

【问题讨论】:

    标签: javascript google-maps angular ionic2


    【解决方案1】:

    我会这样定义CenterControl

    export class CenterControl {
      constructor(controlDiv, map){
        (...)
      }
    }
    

    而不是

    CenterControl(controlDiv, map) {
      (...)
    }
    

    然后在你想使用它的时候导入...不要忘记export关键字。

    编辑

    如果它是你的类的方法,只需这样调用它:

    this.CenterControl(centerControlDiv, options);
    centerControlDiv.index = 1;
    this.map.controls[google.maps.ControlPosition.TOP_CENTER].push(centerControlDiv);
    

    【讨论】:

    • 在同一个JS中,还需要导入吗?以及如何?
    • 我很难看出CenterControl(controlDiv, map) 是在哪里定义的……它是一个类的方法吗?
    • 新 this.CenterControl() ?
    • 它最初是一个 javascript 函数,我不得不删除“函数”,因为它抛出了语法错误
    • 我认为这是您的类的一种方法 ;-) 这就是您可以使用 function 关键字的原因。我更新了我的答案...
    猜你喜欢
    • 2017-08-25
    • 1970-01-01
    • 2017-12-30
    • 2017-12-17
    • 2017-08-19
    • 2015-09-07
    • 1970-01-01
    • 1970-01-01
    • 2017-01-02
    相关资源
    最近更新 更多