2016-03-22 26 views
0

我在角度應用中存儲服務內部的對象,我無法從回調方法中訪問'this'。像這樣的東西...在回調中角度acsess'this'

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

如何正確訪問它? 謝謝...

+1

請先使用搜索,然後再提出一個新問題。 –

+0

下次會試試更好的...是的,比你! –

回答

0

如果obj是你想成爲這個目的,你可以使用bind將其設置爲實際this的功能f,作爲一個例子:f.bind(obj)

如從documentation

的bind()方法創建一個新的功能,調用它時,具有其將此關鍵字設置爲所提供的值[...]

1

「這'只保留在功能的當前範圍內。當在一個新函數中調用'this'時會改變。大多數人做的事情是var that = 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; 
     }); 
     } 
}); 

我希望它對您有所幫助。