リアクティブフォームグループの一部として、dateプロパティをmat-datepickerの入力にバインドしようとしています。フォームが有効でない限り、送信ボタンが無効に設定されているため、すべてのメソッドが機能しませんでした。
_<mat-form-field fxFlex>
<input matInput [matDatepicker]="datepicker1" placeholder="Start Date" formControlName="startingDate" required>
<mat-datepicker-toggle matSuffix [for]="datepicker1"></mat-datepicker-toggle>
<mat-datepicker touchUi="true" #datepicker1></mat-datepicker>
</mat-form-field>
_
Component.ts:
_start: Date.now()
startDate: "1/1/2018"
this.ShiftForm = new FormGroup({
startingDate: new FormControl(this.startDate),
startTime: new FormControl(),
endingDate: new FormControl(this.endDate),
endTime: new FormControl(),
});
_
動作しなかったメソッド:
[(ngModel)]="startDate"
を入力フィールドに追加[ngModel]="startDate"
_を追加するstartingDate: new FormControl(this.startDate),
部分的にではあるが満足に機能しないメソッド:
[value]="startDate"
_を入力フィールドに追加:日付は表示されましたが、リアクティブフォームで読み取られませんでした。つまり、フォームが無効なため、送信ボタンが無効のままになります。有効にするには、日付を手動で設定する必要があります(日付入力または日付ピッカーを使用)[ngModel]="startDate"
_を削除しながら_[matDatepicker]="datepicker1"
_を追加する:date dateが表示されましたが、datepickerへのアクセスが削除されました。私が必要とするのは、[ngModel]だけであるため、Reactive Formがそれを読み取る必要があります。
大いに感謝ヘルプ!
[〜#〜] edit [〜#〜]これは私のformGroupです:
_this.ShiftForm = new FormGroup({
startingDate: new FormControl(this.startDate),
startTime: new FormControl(),
endingDate: new FormControl(this.endDate),
endTime: new FormControl(),
});
_
これはHTMLです。
_<form [formGroup]="ShiftForm" fxLayout="column" fxLayoutAlign="center stretch">
<mat-form-field fxFlex>
<input matInput [matDatepicker]="datepicker1" placeholder="Start Date" [formControlName]="startingDate" required>
<mat-datepicker-toggle matSuffix [for]="datepicker1"></mat-datepicker-toggle>
<mat-datepicker touchUi="true" #datepicker1></mat-datepicker>
</mat-form-field>
..
..
..
</form>
_
これは私が今得たエラーです:
エラー:名前属性が指定されていないコントロールが見つかりません
Angularには、フォームを使用する2つの方法があります: template-driven または reactive 。これら2つを混ぜて使用しますが、どちらを使用するかを選択する必要があります。ドキュメントは、この選択であなたを導くことができます。
テンプレート駆動を選択する場合、[(ngModel)]
を使用できます(メソッド1と同様)。
<input matInput [matDatepicker]="datepicker1" placeholder="Start Date" [(ngModel)]="startDate" required>
startDate = new Date();
リアクティブを選択すると、コントローラーのFormControl
で[formControl]
を使用できます(方法3と同様)。
<input matInput [matDatepicker]="datepicker1" placeholder="Start Date" [formControl]="startDate">
startDate = new FormControl(new Date(), Validators.Required);
// Use `startDate.value` to get the value of the control
何をしているかわからない場合は、[value]
を使用しないでください。予期しない結果が得られる可能性があります。
解決済み、@ Manduro、これについて説明してくれてありがとう
this.startDate
は文字列でしたが、Datepickerは日付のみを翻訳します。
最終的に、これは私がそれを機能させるために追加したものです。
startingDate: new FormControl(moment(this.startDate).format())
HTML:
<mat-form-field fxFlex>
<input matInput [matDatepicker]="datepicker1" placeholder="Start Date" formControlName="startingDate" required>
<mat-datepicker-toggle matSuffix [for]="datepicker1"></mat-datepicker-toggle>
<mat-datepicker touchUi="true" #datepicker1></mat-datepicker>
</mat-form-field>