0

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?

klutch1991
  • 229
  • 2
  • 16

0 Answers0