【发布时间】:2017-03-10 19:16:09
【问题描述】:
我正在开发一个应用程序,其中有一个组件 (RecordSelectorComponent),用户可以在其中从网格中选择多个记录。 RecordSelectorComponent 嵌套在 SharedAttributesComponents 中,SharedAttributesComponents 嵌套在 WizardComponent 中,而后者又嵌套在 ModalComponent 中。所以层次结构看起来像这样:
RecordSelector -(嵌套)-> SharedAttributes -> Wizard -> Modal -> App
我希望 RecordSelectorComponent 能够与顶级应用程序共享其选定记录的列表,以便在任何给定时刻,应用程序都可以请求当前选定的所有记录的列表。据我了解,最好的方法是创建一个 RecordSelectorService。
我的第一个想法是,最好的方法是简单地使用 observable,如下所示:
import { Injectable } from '@angular/core';
import { Record } from './record.interface';
import { Observable } from 'rxjs/Observable';
@Injectable()
export class RecordSelectorService {
private selectedRecords : Array<Record>;
private setSelected(selected : Array<Record>): void {
this.selectedRecords = selected;
}
public getSelectedObservable() : Observable<Array<Record>> {
return Observable.from(this.selectedRecords);
}
}
然而我从那以后学到的是,当你从一个数组创建一个 observable 时,它不是数组的 observable,它是一个在数组中发出值的 observable。我希望的是一个 observable,它会发出当前选定记录的数组。
因此,我开始研究完成我所追求的最佳方法,但事情变得令人困惑。我看到了一些 Stack Overflow 的答案,建议最好的方法是使用 Subject 或 BehaviorSubject。我看到另一个建议我使用 KnockoutJS 库的 observableArray。但在所有问题中,我都没有看到像我这样简单的用例:我只希望一个组件通过服务访问另一个组件的数组,并随着该数组的变化而更新。
那么,对我来说,最简单、最简单的方式是使用服务来传达数组及其在组件之间的变化?
非常感谢您。
【问题讨论】:
标签: angular typescript service rxjs observable