2017-12-21 6 views
0

私は選択ドロップダウンリストを持っています。ページが読み込まれると、デフォルトでオプションが選択されます。私はngOnInit()の間にデフォルト値を取得したいと思います。ただし、空の値が返されます。Angular 4のReactiveフォームを使用してngOnInitでドロップダウンのデフォルト選択値を取得する方法

HTML

get segmentOne() { return this.myForm.get('segmentOne'); } 

ngOnInit() { 
    console.log(this.segmentOne.value); 
    // returns empty string "" 
} 
+0

anotherSegment.nameはどこですか? –

+0

'anotherSegment.name'は私が渡しているオブジェクトですが、無視することができます。多分それを静的な値と見なしてください。 2. –

答えて

0

これは通常、コード

segmentForm: FormGroup; 
    segmentsForAnalysis = [ 
    {name: 'one', value: 1}, 
    {name: 'two', value: 2}, 
    {name: 'three', value: 3}]; 
    constructor() {} 

    ngOnInit() 
    { 

    this.segmentForm = new FormGroup({ 
     'segmentOne': new FormControl(this.segmentsForAnalysis[0].value) //<--- 
    }); 

    } 
のtypescriptです部分で行われます。あなたはあなたの選択値を与えたい場合は、あなたのフォームをインスタンス化するとき

、あなたはそれを行います

そしてHTML部分に

<form [formGroup]="segmentForm" (ngSubmit)="onSubmit()"> 
    <select (change)="segmentOneSelected()" formControlName="segmentOne" class="form-control segment-1"> 
    <option *ngFor="let segment of segmentsForAnalysis" [value]="segment.value" >{{segment.name}}</option> 
    </select> 
</form> 
0

選択した属性は角では動作しません

<select (change)="segmentOneSelected()" formControlName="segmentOne" class="form-control segment-1"> 
    <option [attr.value]="-1">Select</option> 
    <option *ngFor="let segment of segmentsForAnalysis" [attr.value]="segment.index" [attr.selected]="segment.name == 2 ? true : null">{{segment.name}}</option> 
</select> 

コンポーネント。反応形式については

segmentsForAnalysis = [ 
    { index: 0, name: 'Segment 1' }, 
    { index: 1, name: 'Segment 2' }, 
] 

this.myForm = this.formBuilder.group({ 
    segmentOne: [this.segmentsForAnalysis[1].name, [/* Validators */]] 
}) 
+0

'selected'属性が部分的に私のために働いているようです。そのリストからドロップダウンを正しく選択しています。ただし、リストからドロップダウンを手動で再選択するまで、値は返されません。 –

+0

私は初めてそれが誰かのために働いているのを見る!まあ、とにかく、私の応答はあなたの問題を解決する必要があります:) – trichetriche

0

あなたはコンボボックスに予め選択された値を持っているしたい場合は、フォームのコントロールに値を設定する必要があります。例えば、

this.segmentFormGroup = this.formBuilder.group({ 
    segmentOne: ['pre-selected-value', [Validators.required]] 
}); 

そこであなたは「事前に選択された値にあらかじめ選択された値を設定します、あなたのようにフォームのグループを初期化する)(あなたのngOnInitで

private segmentFormGroup: FormGroup; 

:あなたは、としてフォーム・グループを定義しています'ただし、オプションリストには「pre-selected-value」という値を設定する必要があります。あなたには、いくつかのロジックに基づいて)動的ngOnInit(で予め選択された値を設定する必要がある場合、以下に示すよう

あるいは、あなたが値を設定するformGroupのpatchValue()メソッドを使用することができます:

this.segmentFormGroup.patchValue({ 
    'segmentOne': 'pre-selected-value' 
}); 

最後に、選択した値を取得する場合は、次のスニペットを使用できます。

let selectedValue = this.segmentFormGroup.get('segmentOne').value; 
関連する問題