Angular - 更新组件值,当服务值改变时
Angular - Updating component value, when service value changes
我有多个组件(在一个 NgFor 循环中)调用同一个服务。
我想要的是,当一个组件更改同一服务中的一个值时,该新值随后会发送到调用该服务的每个组件,并随后在组件变量中更新该值。
我希望这是有道理的。
如果您需要更多信息,请告诉我。
只需像这样创建一个 SharedService:
import { Injectable } from '@angular/core';
import { BehaviorSubject, Observable } from 'rxjs';
@Injectable()
export class SharedService {
private sharedData: BehaviorSubject<any> = new BehaviorSubject<any>(null);
sharedData$: Observable<any> = this.sharedData.asObservable();
setSharedData(sharedData) {
this.sharedData.next(sharedData);
}
}
然后可以将此服务注入到您要共享数据的组件中。
要设置数据,调用setSharedData
。要获取 sharedData
的最新更改,请订阅组件 ngOnInit
中的 sharedData$
Observable 权限。
而不是 BehaviorSubject
(这在简单的场景中通常是矫枉过正),您可以使用简单的 getters:
服务有一些数据要共享:
export class ProductParameterService {
showImage: boolean;
filterBy: string;
constructor() { }
}
组件只使用 getter 并且绑定到 属性 的任何模板变量都会在服务值更改时自动更新:
get showImage(): boolean {
return this.productParameterService.showImage;
}
在模板中:
<img *ngIf='showImage'
[src]='product.imageUrl'
[title]='product.productName'>
如果应用程序中任何地方的任何组件使用该服务更改 showImage
的值,视图将自动更新(利用 Angular 的内置更改检测)。
我有多个组件(在一个 NgFor 循环中)调用同一个服务。
我想要的是,当一个组件更改同一服务中的一个值时,该新值随后会发送到调用该服务的每个组件,并随后在组件变量中更新该值。
我希望这是有道理的。
如果您需要更多信息,请告诉我。
只需像这样创建一个 SharedService:
import { Injectable } from '@angular/core';
import { BehaviorSubject, Observable } from 'rxjs';
@Injectable()
export class SharedService {
private sharedData: BehaviorSubject<any> = new BehaviorSubject<any>(null);
sharedData$: Observable<any> = this.sharedData.asObservable();
setSharedData(sharedData) {
this.sharedData.next(sharedData);
}
}
然后可以将此服务注入到您要共享数据的组件中。
要设置数据,调用setSharedData
。要获取 sharedData
的最新更改,请订阅组件 ngOnInit
中的 sharedData$
Observable 权限。
而不是 BehaviorSubject
(这在简单的场景中通常是矫枉过正),您可以使用简单的 getters:
服务有一些数据要共享:
export class ProductParameterService {
showImage: boolean;
filterBy: string;
constructor() { }
}
组件只使用 getter 并且绑定到 属性 的任何模板变量都会在服务值更改时自动更新:
get showImage(): boolean {
return this.productParameterService.showImage;
}
在模板中:
<img *ngIf='showImage'
[src]='product.imageUrl'
[title]='product.productName'>
如果应用程序中任何地方的任何组件使用该服务更改 showImage
的值,视图将自动更新(利用 Angular 的内置更改检测)。