[英]How to trigger an rxjs observable
使用rxjs v6
因此,我有多個要跟蹤/觀察的變量,當它們中的任何一個發生更改時,都會觸發一個Observable來調用API,然后再根據這些變量更新其他內容。
我以為我可以在div
上觸發一個事件來迫使可觀察對象做某事,但是它並沒有基於我想要的結果返回結果
例如
var a, b, c, d // if any updates, should trigger div "update" event
let obs = fromEvent(this.$refs.updater, "update")
.pipe(
switchMap(i => {return this.callAnAPI()})
)
obs.subscribe()
var update = new Event("update")
this.$refs.updater.dispatchEvent(update)
但是,在可觀察對象上沒有訂閱方法。 我試圖修改我的其他Observable之一(有效)
fromEvent(input, "keyup")
.pipe(
map(i => i.currentTarget.value),
debounceTime(delay),
distinctUntilChanged(),
switchMap(value =>
{
this.page = 1
if (ajax)
{
return ajax
}
else
{
return this.axiosAjax({
path,
method,
data: {
...data,
[term]: value
}
})
}
})
)
根據您問題的標題,我推測您的自定義事件只是達到目的的一種手段。
如果是這樣,我認為實際上沒有必要。 如果希望對可觀察對象產生“外部”影響(或觸發),請使用Subject
。
例如:
const { fromEvent, merge, of, Subject } = rxjs; const { switchMap, delay } = rxjs.operators; // fake api const fakeApi$ = of(Math.random()).pipe( delay(2000), ); // store a reference to the subject const triggerApi$ = new Subject(); // apply behavior const api$ = triggerApi$.pipe( switchMap( () => { console.log('switching to api call'); // delegate to api call return fakeApi$; } ) ); // activate (handle result) api$.subscribe((result) => { console.log('api result', result); }); // some outside triggers const fooClicks$ = fromEvent(document.getElementById('foo'), 'click'); const barClicks$ = fromEvent(document.getElementById('bar'), 'click'); const bazChanges$ = fromEvent(document.getElementById('baz'), 'change'); // combined const updates$ = merge(fooClicks$, barClicks$, bazChanges$); // activate updates$.subscribe(triggerApi$);
<script src="https://unpkg.com/rxjs@6.2.1/bundles/rxjs.umd.min.js"></script> <button id="foo">foo</button> <button id="bar">bar</button> <textarea id="baz"></textarea>
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.