Observable 不更新视图

Observable not updating the view

我正在尝试为 angular 构建一个 scheduler component。但是,在创建事件时,似乎没有更新视图。

我创建了一个 minimal StackBlitz that demonstrates the issue

编辑

我也创建了一个StackBlitz with the calendar component。请注意,标签正在更新,但日历上的 div 没有。

export class AppComponent {
  constructor() {
    this.calendarEvents$ = new BehaviorSubject<CalendarEvent[]>([]);

    this.calendarEventParts$ = this.calendarEvents$
      .pipe(map((events) => {
        // Split event over the days it goes...
        return events.map(ev => <CalendarEventPart>{
          calendarEvent: ev
        });
      }));
  }

  calendarEvents$: BehaviorSubject<CalendarEvent[]>;
  calendarEventParts$: Observable<CalendarEventPart[]>;

  onAddEvent() {
    this.christmas = {...};
    this.calendarEvents$.pipe(take(1))
      .pipe(map((events) => events.push(this.christmas)))
      .subscribe(() => {});
  }

  onChangeChristmasStart() {
    this.christmas.start = new Date(2022, 11, 24);
  }
}

BehaviorSubject 按预期更新视图,但在使用 map 运算符后,视图未更新。我已经完成了 this.calendarEvents$.next(data) 但这并没有解决核心问题,并且无法检测到 属性 更改。

编辑

I've updated the code in order to look for changes manually 并强制显式触发变化检测器。然而,即使仅在必要时调用 changeDetectorRef.detectChanges(),视图仍未更新。

您需要更新您的 calendarEvents$ 行为主体。

onAddEvent() {
   this.christmas = {...};
   this.calendarEvents$.next([...this.calendarEvents$.value, this.christmas]);
}