我的页面 struct 是:

<app-header></app-header>
<router-outlet></router-outlet>
<app-footer></app-footer>

如何在不刷新整个页面的情况下更新/刷新app-header组件?

一旦用户成功登录,我希望隐藏标题中的"登录"链接.标题在所有组件/布线中都是通用的.

推荐答案

您可以使用100在整个应用程序的不同组件之间进行通信.您可以定义一个数据共享服务,其中包含您可以订阅和发出更改的100.

Define a data sharing service

import { Injectable } from '@angular/core';
import { BehaviorSubject } from 'rxjs';

@Injectable()
export class DataSharingService {
    public isUserLoggedIn: BehaviorSubject<boolean> = new BehaviorSubject<boolean>(false);
}

在您的101 Providers条目中添加100.

接下来,在<app-header>和执行登录操作的组件中导入DataSharingService.在<app-header>订阅对isUserLoggedIn主题的更改:

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);
}

Angular相关问答推荐

Angular 输入信号和净化值

Angular v12:Uncatch(in promise):ReferenceError:d3 is not defined ReferenceError:d3 is not defined

Angular 16未知参数:独立

无法执行客户端功能Angular 17与ssr'

Toastr在独立组件上的Angular17实现

具有多个输入的Angular struct 指令在第一次加载构件时没有值

在Angular 17的本地服务应用程序时禁用SSR

Angular 组件存储,为什么我的效果可以';在http错误后不会被触发?

区分material 手风琴

无法使用@ngrx/component-store 在其他组件中获取状态更改值

手动关闭 SSE 连接:Angular

如何使用 Angular 12 material 验证密码和确认密码?

带有重定向的Angular 2 AuthGuard服务?

如何在插值中编写条件?

如何在 Angular 2 应用程序中配置不同的开发环境

如何在angular 5 中获取基本网址?

Angular2 中的providers提供者是什么意思?

Angular 2 更改事件 - 模型更改

如何处理Angular2中的查询参数

为什么 Angular 项目中没有 Angular-CLI 为 model生成命令?