Angular 4.xを使用すると動的なフォームが作成されました。 (状況に応じてフィールドを追加または削除することができます) 最初はすべてうまくいっていました。すべての値(開始、終了、カテゴリ)には、テンプレートに初期値が設定されています。視覚的にすべてが完璧に見えます。ページ上の他のオブジェクトに応じて値が正しく推測されたり、ライブで同期されている場合は、ユーザーは何も変更する必要はありません。角4の動的フォーム - タッチしていない場合は空の値 - これらの表示されたデフォルト値を取得する方法?
問題:ユーザーが値を変更しない場合は、すべてフォームから返されます。ページに素晴らしいコンテンツを表示しているにもかかわらず。 すでに元気な/汚れていて、触れられた旗でたくさん遊んだ。何も変わっていません。
最後に、開始値と終了値の回避策が見つかりました。あまり美しくない。 typescriptで同じ日付変換を行い、formbuilderの開始値と終了値をまったく同じものに設定するだけです。テンプレートから値=を削除して、重複したコードを減らすことができました。しかし、それを行うと、入力フィールドはページ上に空のままです。
しかし、この回避策はcategory_idのものでは機能しません。これは、ページ上のライブを変更する可能性があります。さらに、categoriesService.selectedCategoryはnoneにすることができます。また、categoriesService.selectedCategory.idフィールドにも興味があります。
ページ上の視覚的なことが行われ、うまく見えます。しかし、提出時にこれらの値をページから入手するにはどうすればよいですか? (ユーザーが値でプレーしていない場合でも)
これは私のテンプレートがどのように見えるかです:
<form [formGroup]="myNewCustForm" novalidate (ngSubmit)="save(myNewCustForm)">
...
<label>product</label>
<select class="form-control" formControlName="category_id">
<option
*ngFor="let category of categoriesService.categories"
[ngValue]="category.id"
[selected]="categoriesService.selectedCategory ? category.id === categoriesService.selectedCategory.id : false">
{{category.name}}
</option>
</select>
...
<label>start</label>
<div class="input-group">
<input
class="form-control"
placeholder="yyyy-mm-dd"
name="dprestart"
ngbDatepicker
#dpstart="ngbDatepicker"
value="{{startDate | date: 'yyyy-MM-dd'}}"
formControlName="start"/>
<button
class="input-group-addon"
(click)="dpstart.toggle()"
type="button">
<i class="fa fa-calendar" aria-hidden="true"></i>
</button>
</div>
活字体(角の4.x):
return this.formBuilder.group({
start: this.startDateString,
end: this.endDateString,
category_id: ''
});
とで保存方法:たstartDateとendDateにおよそ
this.presences.value.forEach(presence => {
...
console.log(presence.start);
console.log(presence.category_id);
...
}
詳細情報:
// presence default values - declarations
startDate: Date;
startDateString: string;
endDate: Date;
endDateString: string;
、その後ngInitに呼び出されるメソッドで:
this.endDate = new Date(Date.now());
this.endDate.setHours(0, 0, 0);
if(this.endDate.getDay() > 4) {
this.endDate.setDate(this.endDate.getDate()+13-(this.endDate.getDay() || 7));
} else {
this.endDate.setDate(this.endDate.getDate()+6-(this.endDate.getDay() || 7));
}
this.startDate = new Date(Date.now());
this.startDateString = this.datePipe.transform(this.startDate, 'yyyy-MM-dd');
this.endDateString = this.datePipe.transform(this.endDate, 'yyyy-MM-dd');
もう1つの回避策が見つかりました。結果が ""返されたかどうかを確認するだけです。もしそうなら、デフォルト値が何であったのかを再計算しようとします。クリーンな方法はありますか? – user3387542
この回避策はどちらも機能しません。 – user3387542
これのためのプランナーはありますか? –