簡體   English   中英

條件可觀察的交互RxJS

[英]Conditional observable interaction RxJS

我有以下觀察值:

this.searchValue$ = this.searchValue.valueChanges.pipe(
  startWith(''),
  debounceTime(500)
);

this.cardAmount$ = fromEvent(this.button.nativeElement, 'click').pipe(
  startWith(0),
  scan(count => count + 20, 0)
);

為代碼添加更多上下文: searchValue$與輸入字段更改相關,並發出更改后的值。 cardAmount$與按鈕按下有關。 每次您按下一個按鈕,它都會發出一個新值20、40、60,依此類推。

我想在cardAmount$ searchValue$cardAmount$的值“設置”回0。 正確的RxJS方法是什么?

據我所知,您不能使用此代碼。

為此,您將需要同時充當可觀察者和觀察者的代理。 否則,您將無法在流中發出值。

嘗試使用BehaviorSubject

this.searchValue$ = this.searchValue.valueChanges.pipe(
  startWith(''),
  debounceTime(500),
  tap(() => this.cardAmount.next(0)),
);

this.cardAmount$ = new BehaviorSubject(0);

fromEvent(this.button.nativeElement, 'click').pipe(
  startWith(0),
  switchMap(() => this.cardAmount$),
).subscribe(curr => this.cardAmount$.next(curr + 20));

我略微更改了最后一個觀察者,因為如果您不保留並保留上一個觀察者,則計數值將不會在意值更改的重置。 為確保它確實有效,您必須使用觀察者的當前值。

聽起來像是switchMap運算符的完美案例:

this.cardAmount$ = this.searchValue$
.pipe(switchMap( search =>
  fromEvent(this.button.nativeElement, 'click')
   .pipe(
    startWith(0),
    scan(count => count + 20, 0)
)));

每個searchValue發射將生成一個從0開始的新Observable。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

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