Angular 如何强制其他角度组件刷新和更新视图?

Angular 如何强制其他角度组件刷新和更新视图?,angular,angular2-changedetection,Angular,Angular2 Changedetection,我正在开发Angular+2应用程序,为用户提供“更新个人资料”页面。用户可以将用户名从“JSmith”更新为“JDoe”。我们在右上角有一个单独的菜单组件,显示一些基本的用户数据——用户名、电子邮件等 问题:在用户更新用户名后,我希望save方法也能触发菜单组件的更新,以便显示的信息——用户名等——也能得到更新 问题:对特定组件执行更改的技术是什么?您需要有一个服务并公开一个可观察的,然后您的所有组件,如菜单、工具栏和…订阅此服务以获取用户信息,然后当用户信息更改时,您只需下一个该可观察的,所

我正在开发Angular+2应用程序,为用户提供“更新个人资料”页面。用户可以将用户名从“JSmith”更新为“JDoe”。我们在右上角有一个单独的菜单组件,显示一些基本的用户数据——用户名、电子邮件等

问题:在用户更新用户名后,我希望save方法也能触发菜单组件的更新,以便显示的信息——用户名等——也能得到更新


问题:对特定组件执行更改的技术是什么?

您需要有一个服务并公开一个可观察的
,然后您的所有组件,如菜单、工具栏和…订阅此服务以获取用户信息,然后当用户信息更改时,您只需
下一个
该可观察的,所有内容都将显示出来将自动更新

您可以创建一个将用户名、电子邮件等属性作为公共静态属性的服务。因此,您可以更新一个组件中的静态变量,并在另一个组件中读取它们,它将立即更改。(这两个组件将使用存储在服务中的相同属性,一个组件将更改这些属性,另一个组件将直接从中读取).

如果您想通知其他组件数据的更改,可以使用事件模型。基本上,您可以创建一个注入到组件中的单例服务。此服务有一个
主题
字段,可用于广播更改以及订阅该广播

userMenu.component.ts

import { Component, OnInit } from '@angular/core';
import { UserStateService } from './userState.service';

export class UserMenuComponent implements OnInit {
    constructor(private readonly userStateService: UserStateService) { }

    ngOnInit() {
        this.userStateService.userChanged
            .asObservable()
            .subcribe(userInfo => {/* do something */});
    }
}
userInput.component.ts

import { Component, OnInit } from '@angular/core';
import { UserStateService } from './userState.service';

export class UserInputComponent {
    userData: any;
    constructor(private readonly userStateService: UserStateService) { }

    onSave() {
        this.userStateService.userChanged.next(this.userData);
    }
}
userState.service.ts

import { Injectable } from '@angular/core';
import { Observable, Subject } from 'rxjs';

@Injectable({ providedIn: 'root' })
export class UserStateService {
    userChanged = new Subject();
}

谢谢你,伊戈尔。我很欣赏你回答的细节。