2017-07-08 21 views
0

Ionic 2 AppでAngular 2(Typescript)を使用しています。私は1つのクラスNewFavoriteSitePageプライベートプロパティsiteFormと私はクラスのメソッドでこのプロパティを使用することができますが、私は1つのGoogleマップのメソッドの中にいるときこの変数は定義されていません。変数の範囲は何か、または両側からアクセスする変数を定義するにはどうすればよいですか?タイプスクリプト内のスコープ変数

declare var google; 
...... 
export class NewFavoriteSitePage { 
    ..... 
    private siteForm: FormGroup; 

    loadMap(){ 
    //I can access to siteForm here! 
    ..... 
     google.maps.event.addListener(marker, 'dragend', function(marker, siteForm){ 
     let newlatLng = marker.latLng; 
     console.log(this.siteForm); //Here this.siteForm is undefined 
     }); 
    } 
+0

私がテストしています'public siteForm:FormGroup'は動作しません。 – CampDev

+0

私は 'decl var siteForm:any'を' decl go var google'の下でテストしていますが、それもうまくいきません。 – CampDev

+0

これは、typescriptやあなたが使うタイプとは関係ありません。クラス自体とは何の関係もない独自の新しい 'this'を使って関数を作成しています。矢印関数を使用して、バインドして、 'var = this'または新しい関数の' this'があなたが望むものであることを確認するための無数の他の方法の1つを閉じます。 – ASDFGerte

答えて

0

Googleマップがそこに定義されていない理由は、それはもう「この」ページと等しくないを作る関数のコールバック、あるされているので、変数にそれを置くことは、問題を解決します。

private siteForm: FormGroup; 

    loadMap(){ 
    var siteformFromPage=this.siteForm; //this should work 
     google.maps.event.addListener(marker, 'dragend', function(marker, siteForm){ 
     let newlatLng = marker.latLng; 
     console.log(siteformFromPage); 
     }); 
    } 

EDIT:あなたは、最新の値をしたい場合、あなたも試みることができるこの方法です:

private siteForm: FormGroup; 

    loadMap(){ 
     var that=this; //cache that value of the page. 

     google.maps.event.addListener(marker, 'dragend', function(marker, siteForm){ 
     let newlatLng = marker.latLng; 
     console.log(that.siteformFromPage); 
     }); 
    } 
+0

しかし、私はsiteFormFromPageを更新すると、siteFormも更新されません – CampDev

+0

私は2番目のソリューションで更新しました。 –

+0

はい、この作品は、上部の質問を参照してください、バインドや矢印機能を持つより良いソリューションがあります。 – CampDev

0

は、コンテキストを保持するには、矢印機能を使用します。

google.maps.event.addListener(marker, 'dragend', (marker, siteForm) => { 
    let newlatLng = marker.latLng; 
    console.log(this.siteForm); 
    }); 
+0

私はこの '=>'(矢印関数)について詳しく説明できますか?Ionic 2の新機能です – CampDev

+0

@CampDevこの質問は重複としてマークされています。 JavaScriptが 'this'キーワードをどのように扱うかについては、ページ上部を確認してください。 –

関連する問題