如何强制其他 angular 组件刷新和更新视图?
How to force other angular components to refresh and update the view?
我正在开发一个 Angular +2 应用程序,我们在其中为用户提供一个 'update your profile' 页面。允许用户从 "JSmith to "JDoe 更新他们的用户名。我们在右上角有一个单独的菜单组件,显示一些基本的用户数据——用户名、电子邮件等。
问题:在用户更新他们的用户名后,我希望保存方法也触发对菜单组件的更新,以便显示的信息——用户名等——也得到更新。
问题:对特定组件执行更改的技术是什么?
您需要有一个服务并公开一个 Observable<UserInfo>
然后您的所有组件,如菜单、工具栏和...订阅此服务以获取 UserInfo,然后当用户信息更改时,您只需要next
那个可观察的,一切都会自动更新
您可以创建一个将 username 、 email 等属性作为 public 静态属性的服务。所以你可以更新一个组件中的静态变量并在另一个组件中读取它们,它会立即改变。 (这 2 个组件将处理存储在服务中的相同属性,一个组件将更改这些属性,另一个组件将直接从中读取)。
如果您想通知其他组件数据的更改,您可以使用事件模型。基本上,您创建一个注入到您的组件中的单例服务。此服务有一个 Subject
字段,可用于广播更改以及订阅该广播。
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();
}
我正在开发一个 Angular +2 应用程序,我们在其中为用户提供一个 'update your profile' 页面。允许用户从 "JSmith to "JDoe 更新他们的用户名。我们在右上角有一个单独的菜单组件,显示一些基本的用户数据——用户名、电子邮件等。
问题:在用户更新他们的用户名后,我希望保存方法也触发对菜单组件的更新,以便显示的信息——用户名等——也得到更新。
问题:对特定组件执行更改的技术是什么?
您需要有一个服务并公开一个 Observable<UserInfo>
然后您的所有组件,如菜单、工具栏和...订阅此服务以获取 UserInfo,然后当用户信息更改时,您只需要next
那个可观察的,一切都会自动更新
您可以创建一个将 username 、 email 等属性作为 public 静态属性的服务。所以你可以更新一个组件中的静态变量并在另一个组件中读取它们,它会立即改变。 (这 2 个组件将处理存储在服务中的相同属性,一个组件将更改这些属性,另一个组件将直接从中读取)。
如果您想通知其他组件数据的更改,您可以使用事件模型。基本上,您创建一个注入到您的组件中的单例服务。此服务有一个 Subject
字段,可用于广播更改以及订阅该广播。
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();
}