如果您還需要組件中的數據,那麼您可以訂閱它。 但也許你不應該(見下文)...
它的存在,您使用的運營商,可以結合觀測,來定義數據流:
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