I'm developing an authorization component for my angular2 app:
import { Component, OnInit } from '@angular/core';
import { IAuthData } from './auth-data';
import { IAuthResult } from './auth-result';
import { AuthorizationService } from './authorization.service';
import { NotificationsService } from 'angular2-notifications';
@Component({
templateUrl: 'authorization.component.html',
styleUrls: [ 'authorization.component.css' ],
moduleId: module.id
})
export class AuthorizationComponent implements OnInit {
private _authorizationService: AuthorizationService;
private _notificationsService: NotificationsService;
constructor(private authorizationService: AuthorizationService, private notificationsService: NotificationsService) {
this._authorizationService = authorizationService;
this._notificationsService = notificationsService;
}
public pageTitle: string = 'AUTHORIZATION';
public login: string;
public password: string;
ngOnInit() : void {
}
authorize(): void {
this._notificationsService.info(this.pageTitle, `Authorization attempt for "${this.login}": sending auth query to the server.`);
this._authorizationService.authorize(<IAuthData>{ login: this.login, hash: this.password })
.subscribe(authResult => {
let message: string = `"${this.login}": ${authResult.message}`;
if (authResult.isAuthorized) {
this._notificationsService.info(this.pageTitle, message);
}
else {
this._notificationsService.error(this.pageTitle, message);
}
});
}
}
This code works fine, but, in refactoring purposes, I've decided to move lambda expression code from subscribe
into separate method:
private processAuthResult(authResult: IAuthData): void {
let message: string = `"${this.login}": ${authResult.message}`;
if (authResult.isAuthorized) {
this._notificationsService.info(this.pageTitle, message);
}
else {
this._notificationsService.error(this.pageTitle, message);
}let message: string = `"${this.login}": ${authResult.message}`;
if (authResult.isAuthorized) {
this._notificationsService.info(this.pageTitle, message);
}
else {
this._notificationsService.error(this.pageTitle, message);
}
}
Since I did it, field this._notificationsService
has a value of undefined
inside pocessAuthResult()
method. I use this method like this:
authorize(): void {
this._notificationsService.info(this.pageTitle, `Authorization attempt for "${this.login}": sending auth query to the server.`);
this._authorizationService.authorize(<IAuthData>{ login: this.login, hash: this.password })
.subscribe(this.processAuthResult);
}
What's the reason?