2016-03-22 5 views
0

Ich speichere ein Objekt innerhalb des Dienstes in meiner eckigen App, ich kann nicht auf 'dies' innerhalb der Callback-Methode zugreifen. So etwas wie ...angular acses 'this' im Rückruf

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

Wie greife ich richtig darauf zu? Danke ...

+1

Bitte verwenden Sie die Suche, bevor Sie eine neue Frage stellen. –

+0

Werde das nächste Mal besser versuchen ... Ja, als du! –

Antwort

0

Wenn obj ist das Objekt, das Sie das dies sein wollen, Sie bind verwenden können als die eigentlichen this für die Funktion zu setzen f, als Beispiel: f.bind(obj).

Wie aus den documentation:

Die bind() Methode erzeugt eine neue Funktion, die, wenn sie aufgerufen wird, das dieses Schlüsselwort zu dem bereitgestellten Wert eingestellt hat, [...]

1

' Dies wird nur im aktuellen Umfang der Funktion beibehalten. wenn innerhalb einer neuen Funktion aufgerufen wird, ändert sich 'dies'. was die meisten Leute machen ist var das = das;

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

Sie sollten zuerst "dieses" Objekt in eine Variable speichern. Und Sie sollten es innerhalb der Rückruffunktion verwenden.

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

Ich wünschte, es hat Ihnen geholfen.

Verwandte Themen