2016-03-22 8 views
0

私の角型アプリケーションでサービス内にオブジェクトを格納していますが、コールバックメソッド内から 'this'にアクセスできません。このようなもの...angle acsess 'this' in callback

app.service("myService", ['$http', '$q', 
     function($http, $q) { 
      return ({foo: foo}); 

      this.myObj = {}; 

      function doSomething(param, callback){ 
      param++; 
      callback(param); 
      } 

      function foo(param){ 
      doSomething(param, function(responce){ 
      this.myObj.myParam = responce;//'this' is undefined 
      }); 
      } 
    }); 

どのように正しくアクセスできますか? f.bind(obj): はobjは、あなたがこのようにしたいオブジェクトである場合、あなたは一例として、機能fの実際のthisとして設定するbindを使用することができます...

+1

新しい質問をする前に検索を使用してください。 –

+0

次回はもっとうまくやろう...はい、それよりも! –

答えて

0

、ありがとうございました。 documentationからよう

バインド()メソッドは、呼び出されたときに、与えられた値に設定され、このキーワードを持つ新しい関数を作成し、[...]

1

'これは関数の現在のスコープでのみ保持されます。新しい関数の中で呼び出されたとき、 'this'が変更されます。ほとんどの人が何をするかはvar = thisです。

app.service("myService", ['$http', '$q', 
    function($http, $q) { 
     var that = this; 

     return ({foo: foo}); 

     this.myObj = {}; 

     function doSomething(param, callback){ 
     param++; 
     callback(param); 
     } 

     function foo(param){ 
     doSomething(param, function(responce){ 
      that.myObj.myParam = responce;//'that' defined 
     }); 
     } 
}); 
0

最初の「this」オブジェクトを変数に保存する必要があります。 そして、コールバック関数の中で使うべきです。

app.service("myService", ['$http', '$q', 
    function($http, $q) { 
     return ({foo: foo}); 
     var self = this; 
     self.myObj = {}; 

     function doSomething(param, callback){ 
     param++; 
     callback(param); 
     } 

     function foo(param){ 
     doSomething(param, function(responce){ 
     self.myObj.myParam = responce; 
     }); 
     } 
}); 

私はそれがあなたを助けたと思います。