typescript访问侦听器内部的全局变量

时间:2017-02-16 15:01:31

标签: javascript typescript

我有一个Angular 2项目,我想测试事件监听器。 这已定义

map;

然后在填充地图方法中我有

  populateMap() {


var place = { lat: -17.822828, lng: -31.046727 };
this.map = new google.maps.Map(document.getElementById('map'), {
  zoom: 12,
  center: place,
  mapTypeControlOptions: {
    style: google.maps.MapTypeControlStyle.HORIZONTAL_BAR,
    position: google.maps.ControlPosition.TOP_RIGHT
  },
  maxZoom: 19
});


this.map.addListener('click', function (e) {
 var marker = new google.maps.Marker({
    position: e.latLng,
    map: this.map
  });
  this.map.panTo(e.latLng);
});


this.map.fitBounds(this.bounds);
this.map.panToBounds(this.bounds);
}

的监听器中抛出异常
Uncaught TypeError: Cannot read property 'panTo' of undefined

有没有理由说javascript无法找到正确的“this.map”参考,忘了提及,这是Google Maps API v3

1 个答案:

答案 0 :(得分:4)

您位于不同的上下文中,因此this不会引用外部上下文。你必须保留对它的引用,例如

var self = this;
this.map.addListener('click', function (e) {
 var marker = new google.maps.Marker({
    position: e.latLng,
    map: self.map
  });
  self.map.panTo(e.latLng);
});