This question has already been answered:
- Loss of context call 5 responses
I am developing a component responsible for authorization in an Angular2 application. Component Code:
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 = 'Авторизация'; public login: string; public password: string; ngOnInit() : void { } authorize(): void { this._notificationsService.info(this.pageTitle, `Попытка авторизации пользователя "${this.login}": запрос отправлен на сервер.`); 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 option works, however, when refactoring, I decided to render the lambda, which is passed to the subscribe method in a 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); } } authorize(): void { this._notificationsService.info(this.pageTitle, `Попытка авторизации пользователя "${this.login}": запрос отправлен на сервер.`); this._authorizationService.authorize(<IAuthData>{ login: this.login, hash: this.password }) .subscribe(this.processAuthResult); } If you organize the code in a similar way, the field this._notificationsService is undefined . What could be the reason?