У меня есть ситуация, когда у меня есть наблюдаемый, и для каждого излучаемого элемента я хочу создать другой наблюдаемый, но игнорирую значение этого наблюдаемого и вместо этого возвращаю результат первого наблюдаемого.
Например, если я нажимаю кнопку , Я хочу отслеживать то, что происходит с другой кнопкой, только когда первая кнопка включена.
Я могу сделать это сейчас, вроде как, взломав вывод наблюдаемого дочернего объекта и направив его в mapTo
со значением родителя. Вы можете увидеть это в этом коде, который можно воспроизвести в песочница кода:
import { fromEvent, from } from "rxjs";
import { mapTo, switchMap, tap, scan } from "rxjs/operators";
const buttonA = document.getElementById("a");
const buttonB = document.getElementById("b");
const textA = document.querySelector('#texta');
const textB = document.querySelector('#textb');
fromEvent(buttonA, 'click').pipe(
// this toggles active or not.
scan((active) => !active, false),
switchMap(active => {
if (active) {
const buttonBClicks$ = fromEvent(buttonB, 'click');
// here we can observe button b clicks, when button a is toggled on.
return buttonBClicks$.pipe(
// count the sum of button b clicks since button a was toggled on.
scan((count) => count+1, 0),
tap(buttonBCount => {
textB.value = `button b count ${buttonBCount}`;
}),
// ignore the value of the button b count for the final observable output.
mapTo(active)
)
} else {
textB.value = ``;
return from([active]);
}
})
).subscribe({
next: buttonActive => {
textA.value = `Button a active: ${buttonActive}`
}
});
Пара вопросов здесь. В случае, если кнопка включена, внешний наблюдаемый получает значение только после нажатия кнопки. Это mapTo
использование кажется хакерским.
Есть ли лучшие способы сделать это?