У меня есть угловой компонент с BehaviourSubject, инициализированным на текущий месяц:
textLabel: string;
private monthIndex$: BehaviorSubject<number>;
private MONTHS = [
"Gennaio",
"Febbraio",
"Marzo",
"Aprile",
"Maggio",
"Giugno",
"Luglio",
"Agosto",
"Settembre",
"Ottobre",
"Novembre",
"Dicembre"
];
constructor(private listService: ShoppingListService) {}
ngOnInit() {
this.monthIndex$ = new BehaviorSubject<number>(new Date().getMonth());
// Like this it does not display the label
this.setMonthLabel(this.monthIndex$.value);
this.model$ = this.monthIndex$.pipe(
switchMap((monthValue: number) => {
// this.setMonthLabel(monthValue); // This way it works!
return this.listService.getHistoryChartModel(monthValue);
}),
takeUntil(this.destroy$)
);
}
private setMonthLabel(monthIndex: number) {
this.textLabel = this.MONTHS[monthIndex];
}
setMonth(direction: number) {
let monthIndex = this.monthIndex$.getValue();
monthIndex += direction;
monthIndex =
monthIndex < 0 ? 0 : monthIndex > 11 ? 11 : monthIndex;
this.monthIndex$.next(monthIndex);
this.setMonthLabel(monthIndex);
}
И шаблон:
<div class="view-sel-container">
<button
color="primary" mat-icon-button
(click)="setMonth(-1)"
[disabled]="monthIndex === 0">
<i class="material-icons">
keyboard_arrow_left
</i>
</button>
<span class="label-text" *ngIf="textLabel">{{ textLabel }}</span>
<button
color="primary" mat-icon-button
(click)="setMonth(1)"
[disabled]="monthIndex === 11">
<i class="material-icons">
keyboard_arrow_right
</i>
</button>
Это причина синхронизациипочему при передаче значения BehavourSubject методу this.setMonthLabel(this.monthIndex$.value)
метка не отображается в шаблоне?
ОБНОВЛЕНИЕ
Решение, предоставленное Деборой Курата с использованием get /установить вместо BehaviourSubject это лучший способ пойти.Я оставляю исходный вопрос / код открытым, так как до сих пор не понимаю, почему код теперь работает, передавая значение поведенческого объекта в качестве параметра.