angular - Angular2: Åtkomst till klassvariabel inom anonym funktion


Jag är säker på att det finns ett enkelt sätt att göra detta, men jag kan inte hitta det. Här är min kod

export class UserLoginComponent {
private user: User;
public authService: AuthService;

constructor(private cognitoConfigs: CognitoUtil, authService: AuthService) {
    this.user = new User();
    this.authService = authService;
}

authenticate() {

    // Some work being done here
    let cognitoUser = new AWSCognito.CognitoIdentityServiceProvider.CognitoUser(userData);

    cognitoUser.authenticateUser(authenticationDetails, {

        onSuccess: function(result: any) {
            this.authService.login(this.user, result);
        },
        onFailure: function(err: any) {
            console.log(err.message);
        },

    });

}
}

Problem: I onSuccess-återanropet kan jag inte komma åt this.authService-variabeln som tillhör dess föräldraklass.

Svar #1

Använd inte function() eftersom det ändrar omfattningen av this.

Pilsfunktions behåller räckvidden för this

    onSuccess: (result: any) => {
        this.authService.login(this.user, result);
    },
    onFailure: (err: any) => {
        console.log(err.message);
    },

Svar #2

Problemet här är att framgångs-tilbaka-anropsfunktionen är i en annan lexikalisk miljö. Detta är varför i ES6+ kan funktioner definieras med pilfunktioner =>.

onSuccess:(result: any) => {
        this.authService.login(this.user, result);
}

eller tilldela detta till en variabel utanför funktionens omfång med ES5-syntaxen:

var self = this;

onSuccess: function(result: any) {
    self.authService.login(this.user, result);
}

Relaterade artiklar