ich ein Modul wie das gerade geschrieben:Über die Verwendung von `this` in Javascript
(function(){
'use strict';
angular.module('myApp.dashboard').controller('mainControl',mainControl);
mainControl.$inject = ['whichToShow','authService'];
function mainControl(whichToShow,authService){
var self=this;
this.values=whichToShow.getVar();
this.logOut=function(){
whichToShow.setVar(false);
authService.logOutUser();
};
this.removeEvent=function(eventId){
authService.removeEvent(eventId);
}
authService.setOnAuth(authDataCallback);
// Callback to set user's events.
function authDataCallback(authData) {
if (authData) {
console.log("User is logged in with " + authData.email);
self.eventList={};
whichToShow.setVar(true);
} else {
console.log("User is logged out");
}
}
}
})();
In diesem Modul die Leitung self.eventList={};
, zunächst nur this.eventList={}
verwende ich, sagt die Konsole mir TypeError: Cannot set property 'eventList' of undefined
die ganze Zeit.
Bis ich self
als this
festlegen und self
in der AuthDataCallback-Funktion verwenden. Ich finde es schließlich heraus, wie man es löst, weiß aber nicht, warum das ist? Kannst du es mir sagen?
können Sie bitte Ihren Service veröffentlichen? – qchap
Es hat alles mit dem Geltungsbereich zu tun - Ihre 'authDataCallback()' Methode wird von einem anderen Bereich aufgerufen, also ist 'das' nicht mehr das, was Sie dachten, dass es sein sollte. Wenn 'self = this' gesetzt wird, bevor' authDataCallback() 'aufgerufen wird, können Sie auf den ursprünglichen Bereich zugreifen. – arthurakay
Es gibt eine Million gute Ressourcen zu 'diesem' - aber das erste Google-Suchergebnis, das ich auf SO gefunden habe, war: http://StackOverflow.com/Questions/3127429/how-does-the-this-keyword-work – arthurakay