2016-11-28 7 views
0

私は質問を簡略化しようとしており、以下のコードを最小限に抑えました。達成しようとしているのは、httpインストールが完了したときにコールバック関数を呼び出すことです。コールバックメソッドが呼び出されていますが、this変数とそのバインドされた変数に到達できません。なぜなら、asynのロードが完了するとthisは未定義であるからです。Angular2のhttpインストールが完了したときにこれに達する

load(callBackFn)this.http.get(this.sourceAddress).subscribe(
      op =>{  
    if(callbackFn) 
    { 
     callBackFn(); 
    }  
} 

this.load(function() 
{ 
    //**THIS IS NULL HERE ? BUT ACTUALLY this.uniqueId is set** 
    $('#' + this.uniqueId).css("display", "block"); 
}) 
+0

コード内の何かが誤ってインデントされているようです。それを正しく貼り付けることができますか? – marisbest2

+0

たぶん矢印機能を試してみませんか?おかげで 'bind'はそのトリックをしました。'{ $( '#' + this.uniqueId).css( "display"、 "block"); }) ' –

答えて

0

あなたがそのようにしたいと思う理由はわからないが、あなたはちょうどあなたが加入した後、あなたが必要なクラスこれまでどのようなメンバーアクセスすることができたときにコールバック関数と少し厄介ようだが、私はあなたが結合しなければならないことを推測しますこれはコールバックにしたかった:

export class SomeComponent 
{ 
    private sourceAddress = 'some/url'; 
    private uniqueId = 'spam'; 


    constructor(private http: Http) 
    { 
    } 

    ngOnInit() 
    { 
     this.load(this.loadSuccess).bind(this); 
    } 

    load(callBackFn) 
    { 
     this.http 
      .get(this.sourceAddress) 
      .subscribe(
       response => 
       { 
        if (callBackFn) 
        { 
         callBackFn(); 
        } 
        this.loadSuccess() //or just call it directly with no callback 
       }, 
       error => 
       { 
        console.log(error) 
       }); 
    } 

    loadSuccess() 
    { 
     $('#' + this.uniqueId).css("display", "block"); 
    } 

} 
+0

あなたはコールバックが面倒だと書いています。では、あなたの選択肢は何ですか?私はローカルの 'uniqueid'プロパティを使う関数を呼びたいと思います。別の回避策があるのですか? –

+0

答えを更新しましたコメントを参照してください。 'this.loadSuccess()'を使用して、クラスで必要な関数にアクセスするだけでコールバックを渡すのではなく、単純なアプローチが常に優れています。 –

+0

ありがとうございました。それは初期状態だった。私は、あなたの言葉から「束縛する」代替手段があると思いました。 –

関連する問題