2017-04-11 59 views
1

我有以下的監聽器是在OnInit方法:在運行時爲什麼打字稿看不到我的功能?

google.maps.event.addListener(this.map, 'click', function(event) { 
     console.log(event.latLng); 
     var lt = event.latLng.lat; 
     var ln = event.latLng.lng; 
     console.log(lt()); 
     console.log(ln()); 
     this.onStoreMarker(lt(),ln()); 
    }); 

外面我有一個在觸發事件被稱爲方法,Angular2編譯這很好,但是當我試圖通過單擊激活事件該應用程序我得到一個錯誤說

Uncaught TypeError: this.onStoreMarker is not a function

onStoreMarker(lt: number,ln: number) { 
     var newStore = prompt("Please enter your store name", "Store Name"); 
     var location = {lat: lt, lng: ln}; 
     var marker = new google.maps.Marker({ 
      position: location, 
      map: this.map, 
      title: newStore, 
     }); 
    } 

回答

4

變化

google.maps.event.addListener(this.map, 'click', function(event) { 

google.maps.event.addListener(this.map, 'click', (event)=> { 

this不是指的你的組件。

另外,老JS方式:

var self = this; // store this in a variable to use it later 
google.maps.event.addListener(this.map, 'click', function(event) { 
     console.log(event.latLng); 
     var lt = event.latLng.lat; 
     var ln = event.latLng.lng; 
     console.log(lt()); 
     console.log(ln()); 
     self.onStoreMarker(lt(),ln()); // <-- use it later 
    }); 

我建議你閱讀此進行了較深入的答案:How to access the correct `this` inside a callback?

+1

由於它的工作 – user7629970