私は反応式を使用しており、データがフォームのコントロールにどのようにマップされているか理解していません。 IDと名前を持つオブジェクトコントロールの例を見てみましょう。このコントロールは、入力テキストボックスとしてレンダリングされ、ユーザーがIDを入力する必要があります。入力ボックスには[オブジェクトのオブジェクト]のように - これはオブジェクトではなく文字列で、以来、私はその後、リモートでオブジェクトを検索し、この関数を含むtypescriptクラスのjsonデータを取り込みます
{ id: 1234, description: "Some description" }
のように見えるデータと基礎となるオブジェクトを移入するためにオートコンプリート機能を使用していますその価値。私はこのオブジェクトが1234 - Some description
のような値を表示できるように、toString
メソッドを提供する必要があると仮定しています。ここ
はフォーム構成である:
this.orderForm = this.fb.group({
customer: '',
....
items: this.fb.array([ this.initItems() ])
...
だからcustomer
は、それらのオブジェクトの一つであり、他の同様の物体がitem
オブジェクトです。
export class Customer {
id: string;
descr: string;
toString =() => this.id + " - " + this.descr
}
export class ItemDetail {
id: string;
descr: string;
toString =() => this.id + " - " + this.descr
}
export class Order {
id: string;
...
customer: Customer;
items: Item[]
}
export class Item {
...
detail: ItemDetail
...
}
私は注文データを持っていたら、私はこのような形でそれをロードしています:
const itemsFGs = order.items.map(item => this.fb.group(item));
const itemsFA = this.fb.array(itemsFGs);
this.orderForm.setControl('items', itemsFA);
問題は、データがプレーンなオブジェクトとしてロードされ、適切にキャストタイプではないということですそのため、入力ボックスがtoStringメソッドを使用する代わりに[object Object]
と表示されるネストされたオブジェクトのいずれにもtoString
メソッドがありません。ここで
はサンプル順序のためのJSONがどのように見えるかです:私はJSONとして入ってくるデータが適切なクラスでキャプチャされていることを確認することができますどのように、主な質問は
{
id: "1",
customer: {
id: "1",
name: "some customer"
},
items: [{
detail: {
id: "1",
descr: "some item"
}
}]
}
ある
ようのtoStringのようなメソッド適切な表示が可能です。
をグループ化する別のレベルを行う必要がありますtostringメソッドを使用して、入力テキストボックスに正しく表示されるようにします。どのようにそれを行うための任意の提案? – adeelmahmood
テキストボックスに関してtoString()は何をしますか? – Aravind
顧客オブジェクトにこのデータがあります。 '{id:1、name: 'abc'}'。[formControl] = "customer"を使用してこのオブジェクトを入力テキストボックスにバインドすると、入力ボックスに[object Object]がその値として表示されます。私は代わりに '1 - abc'のようなものを表示したいと思います – adeelmahmood