Обновление сигнала не вызывает эффекта
Значение объявлений в приведенном ниже коде успешно изменено.effect
выполняется один раз, но не тогда, когдаchangeDates
выполняет.
@Injectable({
providedIn: 'platform',
})
export class AnnouncementsService {
announcements: WritableSignal<Announcements>;
constructor(private logger: NGXLogger) {
this.announcements = signal({
start: new Date('2023-08-27'),
end: new Date('2023-09-03'),
content: `some content`,
});
effect(() => {this.logger.debug('test data')})
}
changeDates(howMuch: number) {
this.announcements.update((announcements: Announcements) => {
announcements.start.setDate(announcements.start.getDate() + howMuch);
announcements.end.setDate(announcements.end.getDate() + howMuch);
return announcements;
});
}
goForward() {
this.changeDates(7);
}
goBackwards() {
this.changeDates(-7);
}
}
Это ошибка? Что я делаю не так?
1 ответ
Как упоминалось в угловом документе:
Эффекты всегда запускаются хотя бы один раз. Когда эффект запускается, он отслеживает любое чтение значений сигнала. Всякий раз, когда любое из этих значений сигнала изменяется, эффект запускается снова.
Вам необходимо читать сигнал внутри эффектов, чтобы эффекты запускались при каждом изменении значения сигнала.
effect(() => {this.logger.debug(`test data ${this.announcements()}`)})