все переменные с типом super Observable
имеют метод subscribe()
.
, этот метод получает 3 параметра (и 2 являются необязательными).
В строке 24 вы можете сделать:
this.item = this.itemDoc.valueChanges();
this.item.subscribe(
(item) => alert("Notification"), // Will be called on any value changes.
(err) => console.log(err), // Optional params : will be called if error occur.
() => console.log('stream is finished') // Optional params: will be called just before stream is finished and will not have any value change anymore.
);
Rx JS и наблюдаемые являются мощными инструментами, основанными на концепции потоков и асинхронных c. Наблюдаемое можно рассматривать как поток данных, которые происходят на временной шкале.
Этот поток может быть обработан оператором. Ваш случай - игнорировать первое выбранное значение из вашего потока, а затем реагировать на все последующее. Существует один вызов оператора skip , который позволяет пропустить первое излучение N в вашем потоке.
this.item.pipe(skip(1)).subscribe([...])
Из исходного потока создайте новый, в котором первое излученное значение будет игнорироваться.
Важная информация: наблюдаемые подписки уничтожаются только в следующих двух случаях:
- , если наблюдаемые имеют ошибку или завершают поток.
- , если подписка отменяется .
чем означает по вашему делу, если уничтожено NotificationsComponent
(удалить из DOM). Подписка по-прежнему будет подписана, и вы по-прежнему будете получать оповещения о любых изменениях, независимо от того, существует ли компонент по-прежнему или нет.
, чтобы предотвратить это, вероятно, неожиданное поведение. Вы должны сохранить подписку и отказаться от подписки на OnDestroy
ловушку жизненного цикла.
export class NotificationsComponent implement OnDestroy {
[...]
item: Observable<Item>;
subscriptionItem: Subscription = null;
[...]
constructor() {
this.subscriptionItem = this.item.subscribe([...]);
}
ngOnDestroy() {
if (this.subscriptionItem !== null)
this.subscriptionItem.unsubscribe();
}
}