2017-11-18 3 views
2

以前に選択したものに応じてデフォルト値を設定するにはどうすればよいですか。私が何かを編集してドロップダウンを持っているように、以前に提出したデフォルト値を見ることができるので、ユーザを混乱させることはありません。例えば、私のコードでは、編集ボタンをクリックすると私をページにリダイレクトし、以下の "patchValues()"関数を起動し、サプライヤのリストから選択することができます。私が欲しいのは、私が編集ボタンをクリックした場合、私は選択オプションリアクティブフォームで選択オプションにデフォルト値を設定する

TS

patchValues() { 
    let suppliers = this.myForm.get('suppliers') as FormArray; 
    this.material.suppliers.forEach(supplier => { 
     suppliers.push(this.fb.group({ 
     supplier_id: supplier.name, 
    })) 
    }) 
    } 

HTML

<tr *ngFor="let row of myForm.controls.suppliers.controls; let i = index" [formGroupName]="i"> 
      <td> 
       <select formControlName="supplier_id" class="col-md-12" > 
       <option *ngFor="let supplier of suppliers" [value]="supplier.id"> 
        {{supplier.name}} 
       </option> 
       </select> 
      </td> 
    </tr> 
+0

あなたはstackblitzまたはplunker –

+0

@RahulSinghでこの問題を再現することができます。私は選択オプションにデフォルト値があることを意味します。 「サプライヤを選択してください」という言葉のように – Joseph

+0

@Joseph編集を追加しました – Milo

答えて

1

のようないくつかのことを試すことができます。今、もし

this.material.suppliers.forEach(supplier => { 
    suppliers.push(this.fb.group({ 
    supplier_id: supplier.id 
})) 

:あなたが名前の代わりに実際のIDをプッシュするように思われる

<option value="">Select supplier...</option> 
<option *ngFor="let supplier of suppliers" [ngValue]="supplier.id"> 
    {{supplier.name}} 
</option> 

とあなたのpatchValuesで

:あなたは、そのフィールドが何も事前に値がない場合のデフォルトのオプションを持っていますサプライヤIDがない場合、サプライヤIDが空の文字列の場合は、デフォルトのオプション "Select Supp ..."が選択されます。それは価値が nullなるとしたら、あなたがしたいと思います例えば、あなたがそれに応じてテンプレートを調整する必要が空の文字列ではない場合:

<option value="null">Select supplier...</option> 
+0

supplier_nameは正しいです。私はselectオプションでeditをクリックするとサプライヤの名前を表示したいので。問題は、編集をクリックした後にselectオプションにサプライヤの名前またはサプライヤの名前を表示することです。 – Joseph

+0

'edit'をどこでクリックしますか?あなたの質問にそのようなコードはありません。直面している問題を紹介するデモを作成してください。これで、あなたのコードがどのように見えるかを推測しています。例えば、 'material'がどこから出てきたのかなどです。 – Alex

+0

はい編集はありません。このコードは、編集をクリックした後にデータを読み込む場所です。材料とサプライヤオプションを示しています。問題はサプライヤの選択ですどこでサプライヤを選択できるのですか?また、編集機能の結果として、サプライヤー名のデフォルト値もあります。 – Joseph

0

にデフォルト値を見ることができるということですという変数を(change)でトラックすることもできますtはselectです。あなたはそれを編集モードが起動されたときに設定するために[(ngModel)]="selectedSupplierId"にバインドすることができます。例えば

HTML:

<select [(ngModel)]="selectedSupplierId" (change)=onSuppChange($event.target.value) formControlName="supplier_id" class="col-md-12" > 
    <option *ngFor="let supplier of suppliers" [value]="supplier.id"> 
      {{supplier.name}} 
    </option> 
</select> 

TS:

private selectedSupplierId: any; //specify type if you can 

private onSuppChange(value): void { 
    this.selectedSupplierId = value; 
} 

EDIT:foreachで後プレースホルダをしたい場合は...

<select [(ngModel)]="selectedSupplierId" (change)=onSuppChange($event.target.value) formControlName="supplier_id" class="col-md-12" > 
    <option value="-1">Placeholder text..</option> 
    <option *ngFor="let supplier of suppliers" [value]="supplier.id"> 
      {{supplier.name}} 
    </option> 
</select> 

patchValues()supplier.id = -1と設定します。

クレジットBaconbeastnz's answer

+0

ありがとうございます。しかし、私の問題は、私が編集ボタンをクリックすると、選択オプションがデフォルト値を持っていることです。詳細から値をロードします。 – Joseph

+0

私はこの{{row.value.supplier_id}} – Joseph

+0

@Josephのようなサプライヤのデフォルト値をいつ欲しいのですか?私の例では 'selectedSupplierId'の代わりに' [(ngModel)]プロパティでバインドできます。 'row.value.supplier_id =#' – Milo

0

あなたがうまくいけば、私が正しくあなたの質問を理解しています。この

<form [formGroup]="test"> 
    <div class="col-sm-6 form-group"> 
     <label>Industry</label> 
     <select class="form-control select" formControlName="Industry"> 
     <option [selected] = "true == true" [ngValue] = "0"> Please Select</option> 
     <option *ngFor="let industry of industries" [ngValue]="industry.id">{{industry.name}} </option> 
</select> 
    </div> 
</form> 

Working Example

+0

のようにサプライヤのデフォルト値を設定したい場合は – Joseph

+0

{{row.value.supplier_id}}のように、特定の要素に ' true = true' –

+0

申し訳ありませんが、あなたが言ったことを理解できません。私はを試しましたが、ドロップダウンからサプライヤのリストを複製しています。コードplを編集できますか?ありがとう – Joseph

関連する問題