标记侦听器中的角度NgZone

时间:2017-12-14 10:30:08

标签: angular google-maps listener google-maps-markers

我正在尝试将一些角度属性与* ngIf绑定,但根本不起作用。

我向您展示了我的代码,首先是我的loadMap函数:

  loadMap() {
    this.map = new google.maps.Map(document.getElementById('map'), this.mapOptions);
    google.maps.event.addListenerOnce(this.map, 'idle', ()=>{
      this.addMarkers()
    });
  }

addMarkers()函数:

addMarkers() {
    var me = this;
    this.restaurants.map( restaurant => {
      new google.maps.Marker({
        position: new google.maps.LatLng(restaurant.location.latitude, restaurant.location.longitude),
        map: this.map,
        animation: google.maps.Animation.DROP,
        name: restaurant.id
      })
      .addListener('click', function() {
        me.ngZone.run(() => {
          this.restaurantSelected = restaurant
          console.log(this.restaurantSelected);
        });
      });
    });
  }

问题甚至在ngZone.run()内部,这是引用标记而不是组件。我不知道怎么能解决这个问题。

提前谢谢。

问候。

1 个答案:

答案 0 :(得分:2)

我会使用箭头函数而不是函数表达式来保留this

.addListener('click', () => {
                     ^^^^^^^^
   me.ngZone.run(() => {
      this.restaurantSelected = restaurant
      console.log(this.restaurantSelected);
    });
});