チェックボックスのトグルクリックで動的に無効および有効にする日付ピッカーがありました。ライブラリのすべてのコンポーネントangular material 6.そして、フォームハンドラーにリアクティブアプローチを使用しているため、単純に[disable]
ディレクティブを使用できません。さらにエラーが発生しました:
It looks like you're using the disabled attribute with a reactive form directive. If you set disabled to true
when you set up this control in your component class, the disabled attribute will actually be set in the DOM for
you. We recommend using this approach to avoid 'changed after checked' errors.
Example:
form = new FormGroup({
first: new FormControl({value: 'Nancy', disabled: true}, Validators.required),
last: new FormControl('Drew', Validators.required)
});
そして、私はTSでFormContol
内のFormGroup
を直接置き換えるというアイデアを持っています。
toggleDatePicker() {
this.isDateRange = !this.isDateRange;
this.form.removeControl('to');
if (this.isDateRange) {
this.form.addControl('to', new FormControl({value: new Date(), disabled: false}))
} else {
this.form.addControl('to', new FormControl({value: null, disabled: true}))
}
}
そして、これはinput
タグで機能しますが、mat-datepicker-toggle
は初期状態のままです。 FormControl
に依存しないmat-datepicker-toggle
状態。
<mat-form-field>
<input
matInput
[matDatepicker]="to"
formControlName="to"
[disabled]="isDateRange"
>
<mat-datepicker-toggle matSuffix [for]="to"></mat-datepicker-toggle> // THIS IS NO CHANGE(
<mat-datepicker #to></mat-datepicker>
</mat-form-field>
私のFormControl
操作mat-datepicker-toggle
とは常に同じ状態です。
mat-datepicker-toggle
を操作するにはどうすればよいですかFromControl
?
コントロールのdisable()
およびenable()
メソッドは、コントロールの無効状態をプログラムで切り替えるために使用する必要があります。
このStackblitzの例を確認してください
https://stackblitz.com/edit/angular-lenyzk?embed=1&file=app/datepicker-overview-example.ts
Html
<form [formGroup]="form">
<mat-checkbox (click)="toggleCtrState()">Toggle Control State</mat-checkbox>
<mat-form-field>
<input
matInput
[matDatepicker]="to"
formControlName="to"
>
<mat-datepicker-toggle matSuffix [for]="to"></mat-datepicker-toggle>
<mat-datepicker #to></mat-datepicker>
</mat-form-field>
</form>
コンポーネント
import { Component } from '@angular/core';
import { FormControl, FormGroup, FormBuilder, Validators } from '@angular/forms';
/** @title Basic datepicker */
@Component({
selector: 'datepicker-overview-example',
templateUrl: 'datepicker-overview-example.html',
styleUrls: ['datepicker-overview-example.css'],
})
export class DatepickerOverviewExample {
form = new FormGroup({
to: new FormControl('', Validators.required),
});
toggleCtrState() {
const ctrl = this.form.get('to');
if (ctrl.disabled) {
ctrl.enable();
} else {
ctrl.disable();
}
}
}