2016-03-22 4 views
0

Я храню объект внутри службы в своем угловом приложении, я не могу получить доступ к этому «из» метода обратного вызова. Что-то вроде этого ...angular 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 
      }); 
      } 
    }); 

Как я могу получить к нему доступ правильно? Спасибо ...

+1

Пожалуйста, используйте поиск, прежде чем задавать новый вопрос. –

+0

Попробуй лучше в следующий раз ... Да, чем ты! –

ответ

0

Если obj является объект, который вы хотите быть в этом, вы можете использовать bind, чтобы установить его в качестве фактического this для функции f, в качестве примера: f.bind(obj).

Как из documentation:

Привязать() создает новую функцию, которая при вызове, имеет это свое ключевое слово, установленное на основе предоставленного значения [...]

1

' это «сохраняется» только в текущем объеме функции. при вызове внутри новой функции «это» изменяется. что большинство людей делает это 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

Вы должны сохранить первый «этот» объект в некоторой переменной. И вы должны использовать его внутри функции обратного вызова.

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

Желаю вам.