#angular #angular-components
Вопрос:
У меня есть компонент с именем NavigationBar
, который помещен в app.component.html
<body>
<app-navigation-bar></app-navigation-bar>
<router-outlet></router-outlet>
</body>
</html>
У него есть собственность, имя IsUserLogged
. Если верно — то отобразите меню для входа в систему, если нет, отобразите меню с опцией входа в систему. Возможно ли это, чтобы получить доступ/ссылку на этот компонент от другого?
Я направил конечную /login
точку на LoginFormComponent
. Мне нужно изменить IsUserLogged
NavigationBar
, на true, после успешного входа пользователя в систему.
Ответ №1:
Существуют различные варианты получения одного и того же результата. Я собираюсь поделиться с вами одним из них.
Во-первых, вы должны создать глобальную службу
AuthService.service.ts
@Injectable({
providedIn: 'root'
})
export class AuthServiceService {
private _sesionState: BehaviorSubject<boolean>;
constructor() {
this._sesionState = new BehaviorSubject(false)
}
public changeLoggedIn(isLoggedIn: boolean): void{
this._sesionState.next(isLoggedIn);
}
public onLoggedInChanged(){
return this._sesionState.asObservable();
}
}
Затем, например, на вашей странице входа в систему.
@Component({
selector: 'app-login',
templateUrl: './login.component.html',
styleUrls: ['./login.component.css']
})
export class LoginComponent implements OnInit {
constructor(private authService: AuthServiceService) {}
public login(): void {
// Your logic here
// If gets a success login
this.authService.changeLoggedIn(true);
}
Наконец, в вашем компоненте навигационной панели
@Component({
selector: 'app-navbar',
templateUrl: './navbar.component.html',
styleUrls: ['./navbar.component.css']
})
export class NavbarComponent implements OnInit {
constructor(private authService: AuthServiceService) {}
public getLoggedInUser(): void {
this.authService.onLoggedInChanged().subscribe((loggedIn: boolean) => {
// If(loggedIn) =>
})
}
В этом случае мы используем Субъектов для обмена информацией вокруг приложения. Это может быть все, что вы хотите, любой тип данных.
Итак, если вы хотите узнать больше о предметах, потенциально
Я бы рекомендовал вам Темы, объекты поведения, объекты ответов