代码之家  ›  专栏  ›  技术社区  ›  cooligus

信号更新不调用效果

  •  0
  • cooligus  · 技术社区  · 2 年前

    以下代码中的公告值更改成功。 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);
      }
    }
    

    是虫子吗?我做错了什么?

    0 回复  |  直到 2 年前
        1
  •  2
  •   Chellappan வ    2 年前

    如角 doc :

    效果始终至少运行一次。当效果运行时,它会跟踪任何 信号值读取。每当这些信号值中的任何一个发生变化时 效果再次运行。

    您需要读取效果内部的信号,以便在信号值更改时运行效果

    effect(() => {this.logger.debug(`test data ${this.announcements()}`)})
    
    推荐文章