私が解決しようとしている問題は、http リクエストとフォームグループに関連しています。編集ページのフォームに既存の値をパッチしようとしています。
エラーは、値がデータベース (mongoDB) に存在しない場合に発生します。値は、追加されたオブジェクトにのみ存在します。以下のコードは、私のリクエスト、formgroup、および patchValue です。
this.takeawayService.getByName(this.id).subscribe(data => {
this.takeaway = data.takeaway[0];
console.log(this.takeaway);
this.formData = this.fb.group({
address : ['', Validators.required],
city : ['', Validators.required],
county : ['', Validators.required],
postCode : ['', [Validators.required,
Validators.pattern('[A-Za-z]{1,2}[0-9Rr][0-9A-Za-z]? [0-9][ABD-HJLNP-UW-Zabd-hjlnp-uw-z]{2}')]],
bio : ['', Validators.required],
image : '',
_id : '',
cuisines: [],
isPublic: [false, Validators.required],
'openingHours': fb.group({
'monday': fb.group({
opened: [false],
open: [''],
close: ['']
})
})
});
this.formData.patchValue({
address: this.takeaway.address,
city: this.takeaway.city,
county: this.takeaway.county,
postCode: this.takeaway.postCode,
bio: this.takeaway.bio,
image: this.takeaway.image,
_id: this.takeaway._id,
cuisines: this.takeaway.cuisines,
isPublic: this.takeaway.isPublic,
openingHours: {
monday:{
opened: this.takeaway.openingHours.monday.opened,
open: null,
close: null
}
}
});
リクエストによって返されていない値にパッチを適用しようとすると、「TypeError: undefined is not an object (evaluating '_this.takeaway.openingHours.monday')」というエラーが表示されます。
三項を使用してこれを解決しようとしましたが、うまくいきませんでした (openingHours.monday.opened?openingHours.monday.opened:false)。どんな助けでも素晴らしいでしょう。私は自分の問題に似たものを探してみましたが、運がありませんでした。
編集:いくつかのフィールドをオプションとして設定することで、フォームグループでテンプレートを使用しようとしましたが、うまくいきませんでした。値はまだ定義されていません。
export interface Takeaway {
address: String,
city: String,
county: String,
postCode: String,
bio: String,
image: String,
_id: String,
cuisines: [String],
isPublic: Boolean,
openingHours?: {
monday?: {
opened?: Boolean,
open?: Date,
close?: Date,
}
}