![](/img/trans.png)
[英]How to create an Observable that depends on another Observable in RxJS
[英]how to create a new observable subscription based on existing observable in rxjs?
我需要在我的項目中執行以下操作(來自https://github.com/devyumao/angular2-busy )
ngOnInit() {
this.busy = this.http.get('...').subscribe();
}
在我的項目中,我根據路線變化提出以下要求:
ngOnInit(): void {
this.activatedRoute
.params
.map(params => params['queryString'])
.flatMap(id => this.http.(''))
.subscribe(result => this.data = result);
}
似乎每次路線發生變化時我都需要創建一個新的訂閱。 我不知道該怎么做。
我只在尋找rxjs解決方案(不使用Promise)。
謝謝!
德里克
我會全局(在您的主要組件中)以這種方式注冊路由更改並在相關的回調中觸發您的請求:
this.router.events
.filter(event => event instanceof NavigationStart)
// or NavigationEnd
.subscribe(event => {
this.http.post('').subscribe();
});
這樣您就可以訂閱一次更改。
如果您想要訪問路徑參數,則還需要注入ActivateRoute實例並訂閱其params
屬性。
為此,我將利用Observable
類的combineLatest
方法,如下所述:
export class AppComponent {
constructor(private router: Router, private route: ActivatedRoute) {
Observable.combineLatest(
this.router.events
.filter(event => event instanceof NavigationStart),
this.route.params
)
.subscribe(data => {
const event = data[0];
const params = data[1];
(...)
});
}
}
別忘了添加這個:
import 'rxjs/add/observable/combineLatest';
實際上,您可以訂閱鏈中的ajaxCallObservable。 :)
ngOnInit(): void { this.activatedRoute .params .map(params => params['queryString']) .map(id => this.http.('')) .do(ajaxCallObservable => { this.busy = ajaxCallObservable.subscribe() }) .flatMap(ajaxCallObservable => ajaxCallObservable) .subscribe(result => this.data = result); }
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.