Angular RXJS Observables或Subjects在内部传递数字
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Angular RXJS Observables或Subjects在内部传递数字相关的知识,希望对你有一定的参考价值。
在Angular 5应用程序(无API)中传递数字的正确RXJS方法是什么?
我已经成功传递了一个带有Subject的布尔值:
服务:
import {Injectable} from '@angular/core';
import {Subject} from 'rxjs/Subject';
@Injectable()
export class IsOpened {
data = new Subject();
constructor() {}
insertData(data){
this.data.next(data);
}
}
发射器:
toggle(){
this.opening = !this.opening;
this._isOpened.insertData(this.opening);
}
听众:
ngAfterViewInit() {
this._isOpened.data.subscribe((value) => {
if(value) this.opened = true;
else this.opened = false;
}});
}
我在监听器中作弊,因为我不存储接收到的值,而是评估并重新创建布尔值。
适合我,适合几行。
我不能用数字做同样的事情。
我怎么用数字呢?有阵列?
谷歌和许多RXJS信息来源都没有产生任何结果。
以下是如何将Subject / BehaviorSubject与对象一起使用的示例。这种技术适用于数字。
服务
export class ProductService {
private products: IProduct[];
// Private to encapsulate it and prevent any other code from
// calling .next directly
private selectedProductSource = new BehaviorSubject<IProduct | null>(null);
// Publicly expose the read-only observable portion of the subject
selectedProductChanges$ = this.selectedProductSource.asObservable();
changeSelectedProduct(selectedProduct: IProduct | null): void {
this.selectedProductSource.next(selectedProduct);
}
}
组件设置值
onSelected(product: IProduct): void {
this.productService.changeSelectedProduct(product);
}
在这种情况下,当用户在一个组件中选择某些内容时,该选择被广播给其他几个组件。
组件读取值
ngOnInit() {
this.productService.selectedProductChanges$.subscribe(
selectedProduct => this.product = selectedProduct
);
}
在此示例中,读取值的组件将其存储到其自己的局部变量中。该变量用于绑定,UI根据所选产品进行更改。
注意:您可以使用没有主题/行为主题的getter / setter来实现此SAME功能。
我在这里使用Subject / BehaviorSubject有一个完整的例子:https://github.com/DeborahK/Angular-Communication/tree/master/APM-Final
与getters / setter完全相同的功能而不是Subject / BehaviorSubject:https://github.com/DeborahK/Angular-Communication/tree/master/APM-FinalWithGetters
以上是关于Angular RXJS Observables或Subjects在内部传递数字的主要内容,如果未能解决你的问题,请参考以下文章
在 Angular2 中使用 RxJS 链接 observables
使用 switchmap 和 forkjoin 链接 observables 不能按预期工作 angular typescript rxjs
RxJS Observables 的 Promise.all 行为?
Rxjs:使用 scan 或 mergeMap 或任何 rxjs 在 X 秒后将 observables 数据流(grpc 服务)组合成一个数组