【发布时间】:2026-02-06 14:10:01
【问题描述】:
import { reduce, filter, map, mapTo } from 'rxjs/operators'
import { from, fromEvent, scan, Subscription } from 'rxjs'
const button1 = document.getElementById("but1")
const button2 = document.getElementById("but2")
const button3 = document.getElementById("but3")
let click1 = fromEvent(button1, 'click')
.subscribe(result => {
count3.subscribe(x => p3.innerHTML = `Click count: ${x}`)
})
let click2 = fromEvent(button2, 'click')
在这里我想取消订阅(当我点击第二个按钮时,但当我点击第一个按钮时有机会再次订阅)
我试过这样的东西
const sub = click1.subscribe(result => {
count3.subscribe(x => p3.innerHTML = `Click count: ${x}`)
})
let click2 = fromEvent(button2, 'click')
sub.unsubscribe()
但我不知道如何将 sub.unsubscribe() 放入按钮
let click3 = fromEvent(button3, 'click')
let three = click3.pipe(mapTo(1))
let c: number = 0
let count3 = three.pipe(scan((acc, val) => acc + val, c))
const d = document.getElementById("d")
const p3 = document.createElement("p")
//count3.subscribe(x => p3.innerHTML = `Click count: ${x}`)
d?.appendChild(p3)
【问题讨论】:
-
您是真的要销毁订阅,还是只想让订阅停止产生点击?那里有一个区别,如果您只是想控制流程,那么将 observables 组合在一起可能更有意义。
-
停止发出点击。
标签: javascript html rxjs