2017-11-02 21 views
1

私はメソッド を取得するsubmitAdd()メソッドを持っています。問題は、submitAdd()メソッドでundefinedという値が得られることです。 これはこの問題のようです。ローカル変数がメソッド外で定義されていません

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

あなたがここに思えるようレキシカルスコープこの、 '=>'ではなく 'function'を使用を使用したい場合。 '.bind(this)'を使うこともできます。 –

+0

これでsubmitAdd()メソッドを呼び出す前にpolygonDrawer()メソッドを呼び出しましたか? – Chandru

+1

感謝のように働いています。@AluanHaddad – heisenberg

答えて

1

問題がスコープに関連して、あなたは2つの方法でこの問題を解決することができます


1)と同様に

(polygon) => {に脂肪矢印

function (polygon) {を使用します。

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

2).bind()を使用します。

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

あなたがある値を使用する場合は、非同期

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

で次のコードを持っています利用可能なの後に関数が呼び出されたときに呼び出しを連鎖させる必要があります。これを行う方法:

  • コールバック
  • 約束スコープのpointSTR2外を宣言する必要が
  • 観測

もっと

のJavaScript

で検索非同期プログラミング
0

ファースト関数の(グローバル変数として)それから使用する

thisキーワードを使用してpointSTR2を使用すると、この

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); 
     }); 
} 

を試してみてください。

submitAdd() { 
    console.log("**"+this.pointSTR2); // undefined  
} 
関連する問題