Чтобы выбрать мою начальную дату, я использую метод select () из MatDatPicker. Вы должны знать, что код изменяет значение DatPicker каждый день в полночь с помощью setInterval, это изменение работает должным образом.
Если я помещаю свой метод select () в ngOnInit (), метод не может быть вызван, так как это происходит от ViewChild. Если я помещаю его в ngAfterViewInit (), у меня появляется эта ошибка:
ExpressionChangedAfterItHasBeenCheckedError: Expression has changed after it was checked. Previous value: 'mat-form-field-should-float: false'. Current value: 'mat-form-field-should-float: true'.
Я пытался поместить его в ngAfterViewChecked (), но имел ошибку: TypeError: this.date.toDate is not a function
Единственное решение, которое я нашел, было использовать ngAfterViewInit () с setTimeout (), но мне это кажется уродливым.
У вас есть какое-нибудь лучшее решение?
Вот мой ViewChild: @ViewChild('datePicker', { static: false }) datePicker: MatDatepicker<any>;
Вот мой DatePicker:
<mat-form-field>
<input matInput [matDatepicker]="datePicker" placeholder="Choisissez une date" [(ngModel)]="date" disabled />
<mat-datepicker-toggle matSuffix [for]="datePicker"></mat-datepicker-toggle>
<mat-datepicker #datePicker disabled="false"></mat-datepicker>
</mat-form-field>
Вот ngAfterViewInit:
ngAfterViewInit() {
setTimeout(() => this.datePicker.select(this.date.toDate()));
}
this.date определяется как описано ниже: date = moment();
`