2017-11-02 2 views
1

Ich habe eine Methode submitAdd(), die Wert von einer anderen Methode polygonDrawer() erhalten Das Problem ist, dass ich undefined Wert bei der submitAdd() Methode bekomme. scheint dies ein Problem zu sein.lokale Variable undefined äußere Methode

polygonDrawer()

polygonDrawer() 
{ 
var i; 
var map; 
var cords = []; 
google.maps.event.addListener(drawingManager, 'polygoncomplete', function (polygon) { 

      field.setPath(polygon.getPath().getArray()); 
      field.setMap(map); 

      for (var i = 0; i < field.getPath().getLength(); i++) { 
       cords.push(field.getPath().getAt(i).toUrlValue(6)); 
       text += field.getPath().getAt(i).toUrlValue(6) + "#"; 
      }     
      this.pointSTR2=text.slice(0, -1); 
     }); 
} 

submitAdd()

pointSTR2:any; 

submitAdd() { 
    console.log("**"+this.pointSTR2); // undefined 

} 
+0

Wenn Sie ein lexikalisch diese scoped verwenden möchten, wie Sie hier erscheinen, verwenden Sie '=>' und nicht 'function'. Sie können auch '.bind (this)' verwenden. –

+0

Haben Sie die Methode polygonDrawer() aufgerufen, bevor Sie die Methode submitAdd() aufrufen? – Chandru

+1

Danke funktioniert wie ein Charme mit Pfeil :) @ AluanHaddad – heisenberg

Antwort

1

Ausgabe zum Umfang verwandt ist, können Sie diese durch 2 Wege lösen:


1) Verwenden Sie Fett Pfeil

function (polygon) {-(polygon) => {

Like:

polygonDrawer() 
{ 
    ... 
    google.maps.event.addListener(drawingManager, 'polygoncomplete', (polygon) => { 
     .... 
     this.pointSTR2=text.slice(0, -1); 
    }); 
} 

2) Verwenden Sie .bind():

polygonDrawer() 
{ 
    ... 
    google.maps.event.addListener(drawingManager, 'polygoncomplete', function(polygon){ 
     .... 
     this.pointSTR2=text.slice(0, -1); 
    }).bind(this); 
} 
0

Sie haben den folgenden Code, der async

google.maps.event.addListener(drawingManager, 'polygoncomplete', function (polygon) { 

ist Wenn Sie einen Wert verwenden möchten, ist verfügbar nach dies Funktion wird aufgerufen Sie müssen den Anruf verketten. Wege, dies zu tun:

  • Rückrufe
  • Promises
  • Observable

Mehr

Lookup Asynchron-Programmierung in JavaScript

0

Zuerst müssen Sie pointSTR2 außerhalb des Rahmens erklären der Funktion (als globale Variable) dann verwenden Sie es

Versuchen Sie, diese

pointSTR2 = "" 
polygonDrawer() 
{ 
var i; 
var map; 
var cords = []; 
google.maps.event.addListener(drawingManager, 'polygoncomplete', function (polygon) { 

      field.setPath(polygon.getPath().getArray()); 
      field.setMap(map); 

      for (var i = 0; i < field.getPath().getLength(); i++) { 
       cords.push(field.getPath().getAt(i).toUrlValue(6)); 
       text += field.getPath().getAt(i).toUrlValue(6) + "#"; 
      }     
      pointSTR2=text.slice(0, -1); 
     }); 
} 

Dann pointSTR2this Schlüsselwort verwenden.

submitAdd() { 
    console.log("**"+this.pointSTR2); // undefined  
} 
Verwandte Themen