Я думаю, это будет работать.Вы можете использовать BehaviorSubject
для связи между различными компонентами приложения.Вы можете определить службу обмена данными, содержащую BehaviorSubject
, на которую можно подписаться и отправлять изменения.
Определить службу обмена данными
import { Injectable } from '@angular/core';
import { BehaviorSubject } from 'rxjs';
@Injectable()
export class DataSharingService {
public isUserLoggedIn: BehaviorSubject<boolean> = new BehaviorSubject<boolean>(false);
}
Добавьте DataSharingService
в вашу запись AppModule
поставщиков.
Затем импортируйте DataSharingService
в <app-header>
и в компонент, где вы выполняете операцию входа.В <app-header>
подпишитесь на изменения в isUserLoggedIn
subject:
import { DataSharingService } from './data-sharing.service';
export class AppHeaderComponent {
// Define a variable to use for showing/hiding the Login button
isUserLoggedIn: boolean;
constructor(private dataSharingService: DataSharingService) {
// Subscribe here, this will automatically update
// "isUserLoggedIn" whenever a change to the subject is made.
this.dataSharingService.isUserLoggedIn.subscribe( value => {
this.isUserLoggedIn = value;
});
}
}
В ваш <app-header>
html шаблон необходимо добавить условие *ngIf
, например:
<button *ngIf="!isUserLoggedIn">Login</button>
<button *ngIf="isUserLoggedIn">Sign Out</button>
Наконец, вам нужно просто отправить событие, как только пользователь вошел в систему, например:
someMethodThatPerformsUserLogin() {
// Some code
// .....
// After the user has logged in, emit the behavior subject changes.
this.dataSharingService.isUserLoggedIn.next(true);
}