如果您还需要组件中的数据,那么您可以订阅它。 但也许你不应该(见下文)...
它的存在,您使用的运营商,可以结合观测,来定义数据流:
foo$: Observable <Foo[]> ;
randomClickEvent = new Subject <clickEvent>();
ngOnInit() {
let initialFetch = this.fooService.getData().share()
this.foo$ = Observable.merge(
initialFetch, // need the initial data
initialFetch.flatMap(foos => {
this.randomClickEvent.switchMap(() => { //listen to click events
return this.fooService.getMore().map((moreFoos: Foo[]) => { //load more foos
return foos.concat(...moreFoos) //initial foos values + new ones
})
})
})
);
}
<span *ngFor="let foo of (foo$|async)">{{foo.name}}</span>
<button (click)="randomClickEvent.next($event)">Load More foos !</button>
大多数人只是使用简单的运营商,如map()
,do()
等,并管理他们的订阅势在必行,但它通常是更好的不订阅,所以你避免许多副作用和一些“我忘了退订 这里”。通常你可以在不订阅的情况下做你需要的一切。
存在可观测量来描述数据流,仅此而已,没有什么不足。这是一个函数式编程的范例:你不定义事情是如何完成的,但它们是什么。这里,this.foo$
是可能发生的初始fooService.getData()
和每个fooService.fetchMore()
的组合。
这就是为什么Observable的操作符是:组合观察对象... – n00dl3
嗨,谢谢你的回复。有没有可以为这些情况提供的例子? – anazard
我正在处理它,请耐心等待... – n00dl3