簡體   English   中英

如何根據rxjs中現有的observable創建一個新的可觀察訂閱?

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM