Скажем, я повторяю массив, чтобы элементы были примерно такими:
var containerEl = document.createElement('div');
var list = [1, 2, 3, 4, 5];
list.map((data) => {
var divEl = document.createElement('div');
divEl.innerText = data;
// Make observer for click
divEl.onclick$ = fromEvent(divEl, 'click');
containerEl.appendChild(divEl);
});
Результат должен быть примерно таким:
<div>
<div>1</div>
<div>2</div>
<div>3</div>
<div>4</div>
<div>5</div>
</div>
Важно то, что я добавил onclick $, который можно наблюдать:
divEl.onclick$ = fromEvent(divEl, 'click');
Теперь я могу подписаться на onclick примерно так:
divEl.onclick$.subscribe(...);
Однако что, если я перерисую все элементы div, созданные во время цикла массива списка?
Чтобы отказаться от подписки, мне пришлось вызвать функцию отмены подписки, которая включалась в возвращаемое значение подписки:
const a$ = divEl.onClick$.subscribe(...);
...
a$.unsubscribe();
Это довольно неудобно, особенно с точки зрения модульной / библиотечной разработки.
Есть ли способ отменить подписку всех наблюдателей на divEl.onclick $ в этом случае?
Любой совет будет очень признателен.


![Подсказка RxJS [filter, skipWhile]](https://i.imgur.com/QlvZflrb.jpeg)

Вы можете использовать оператор takeUntil, например
private unsubscriber$: Subject<boolean> = new Subject<boolean>();
const a$ = divEl.onClick$.takeUntil(this.unsubscriber$).subscribe(...);
---
// you want to unsubscribe
this.unsubscriber$.next(true);
this.unsubscriber$.unsubscribe();
Каждый наблюдаемый объект, для которого вы используете оператор takeUntil, откажется от подписки, когда вы измените значение внутри наблюдаемого объекта «unsubscriber $».
Ты мой спасатель. Спасибо чувак!!