Ответ Chellappan верен, причина ниже ...
Ваш HTML использует переменные логического компонента panelOpenState
для управления вашим представлением ... вы создаете эти переменные без значения, когда компонентинициализируется.
panelOpenState1: boolean;
panelOpenState2: boolean;
Затем вы устанавливаете значение для этих переменных компонента после того, как представление отображается через подписку на службу ...
ngAfterViewInit() {
this.panelState.panelOpenState1$.subscribe(panelOpenState1 => this.panelOpenState1 = panelOpenState1);
this.panelState.panelOpenState2$.subscribe(panelOpenState2 => this.panelOpenState2 = panelOpenState2);
}
То есть, когда представление являетсядля [ngClass]="{'flex': panelOpenState2}"
компонентная переменная panelOpenState2
на этом этапе равна undefined
... но затем создаются подписки, которые принимают предыдущее проверенное значение undefined
и заменяют его наблюдаемым логическим значением.
Previous value: 'flex: undefined'. Current value: 'flex: true'
Чтобы избежать этого, нужно выполнить одно из следующих действий ...
Создать переменные компонента со значением.
export class FirstPanelComponent implements AfterViewInit {
panelOpenState1: boolean = true;
panelOpenState2: boolean = false;
Или создайте свои подписки при инициализации компонента ... до ваше представление будет отображено, чтобы переменные компонента не были undefined
, когда представление нуждается в них.
ngOnInit(){
this.panelState.panelOpenState1$.subscribe(panelOpenState1 => this.panelOpenState1 = panelOpenState1);
this.panelState.panelOpenState2$.subscribe(panelOpenState2 => this.panelOpenState2 = panelOpenState2);
}
ngAfterViewInit() {
// this.panelState.panelOpenState1$.subscribe(panelOpenState1 => this.panelOpenState1 = panelOpenState1);
// this.panelState.panelOpenState2$.subscribe(panelOpenState2 => this.panelOpenState2 = panelOpenState2);
}