2017-10-30 5 views
2

In Angular 4, habe ich die folgende Konfiguration in einer JSON-Konfigurationsdatei definiert.Angular 4 - Wählen Sie den Standardwert im Dropdown [Reaktive Formulare]

countries: ['USA', 'UK', 'Canada']; 
default: 'UK' 

Ich muss diese in einem Dropdown-Menü mit Reactive-Modul anzeigen.

Hier ist der Code dieses (ts) zu tun

countries: string[] = []; 
default: string; 
... 
this.countries = config.countries; 
this.default = config.default; 

html

<select id="country" formControlName="country" > 
<option *ngFor="let c of countries" [value]="c" >{{ c }}</option> 
</select> 

Dies macht den Job und zeigt die Länder in einem Dropdown. Ich muss jedoch auch standardmäßig ein Land auswählen, und das Standardland stammt aus dem in json definierten Standardschlüssel.

Also habe ich versucht, so etwas wie dieses

tun {{c}}

Dies ist jedoch nicht funktioniert. Standardmäßig ein leerer Wert, falls ausgewählt.

Wie kann ich sicherstellen, dass ein vordefinierter Wert standardmäßig ausgewählt ist?

Antwort

7

wie diese versuchen:

componen.html

<form [formGroup]="countryForm"> 
    <select id="country" formControlName="country"> 
     <option *ngFor="let c of countries" [ngValue]="c">{{ c }}</option> 
    </select> 
</form> 

component.ts

import { FormControl, FormGroup, Validators } from '@angular/forms'; 

export class Component { 

    countries: string[] = ['USA', 'UK', 'Canada']; 
    default: string = 'UK'; 

    countryForm: FormGroup; 

    constructor() { 
     this.countryForm = new FormGroup({ 
      country: new FormControl(null) 
     }); 
     this.countryForm.controls['country'].setValue(this.default, {onlySelf: true}); 
    } 
} 
+0

Kann [(ngModel)] verwendet werden, wenn reaktive Formulare verwendet werden. – swati

+0

@swati ich werde meine Antwort aktualisiert. Bitte überprüfen Sie es – Chandru

+0

Eine Folgefrage. Was bedeutet "{onlySelf: true}"? – swati

1

Sie müssen eine neue Eigenschaft erstellen (zB: selectedCountry) und sie in [(ngModel)] verwenden und in der Komponentendatei den Wert default zuweisen.

In your_component_file.ts

this.selectedCountry = default; 

In your_component_template.html

<select id="country" formControlName="country" [(ngModel)]="selectedCountry"> 
<option *ngFor="let c of countries" [value]="c" >{{ c }}</option> 
</select> 

Plunker link

+0

I Reactive Modul verwenden. Kann [(ngModel)] damit verwendet werden? – swati

+0

ideal '[(ngModel)]' sollte nicht mit 'reaktiven Formen' verwendet werden, während der Beantwortung habe ich keine reaktive Form bemerkt :)., Bitte, bitte [überprüfen Sie diese Antwort] (https://stackoverflow.com/ Fragen/39766029/angular2-reactive-forms-set-default-value-for-form-fields-with-dropdown) – anoop

2

In Ihrer Komponente -

Sicherstellen, dass der Formcontrol Namen Land mit einem Wert initialisieren.

Zum Beispiel: Unter der Annahme, dass das Formular Gruppenname ist myForm und _fb ist Formbuilder Beispiel dann,

.... 
this.myForm = this._fb.group({ 
    country:[this.default] 
}) 

und versuchen auch [Wert] mit [ngValue] ersetzen.

EDIT 1: Wenn Sie den Wert beim Deklarieren nicht initialisieren können, dann setzen Sie den Wert, wenn Sie den Wert wie folgt haben.

this.myForm.controls.country.controls.setValue(this.country) 
+0

[Wert] oder [ngValue] gibt das gleiche Ergebnis. Außerdem wird gemäß diesem https://stackoverflow.com/questions/47000189/angular-4-find-selected-value-in-dropdown/47002742#47002742 vorgeschlagen, [value] from string zu verwenden. – swati

+0

Der Standardwert kann beim Initialisieren eines Formulars nicht initialisiert werden, da dieser Wert viel abgerufen wird, nachdem das Formular initialisiert wurde. Daher sind mehrere solcher Konfigurationen definiert, und basierend auf einigen Benutzereingaben/Auswahl wird ein bestimmter Satz von Konfigurationen geladen. – swati

+0

Ich habe meine Antwort bearbeitet, überprüfen Sie, ob sie für Sie arbeitet –

2

In reaktiven Formen. Die Bindung kann in der Komponentendatei und der Verwendung von ngValue erfolgen. Weitere Details

über den folgenden Link gehen Sie bitte

https://angular.io/api/forms/SelectControlValueAccessor

import {Component} from '@angular/core'; 
import {FormControl, FormGroup} from '@angular/forms'; 

@Component({ 
    selector: 'example-app', 
    template: ` 
    <form [formGroup]="form"> 
     <select formControlName="state"> 
     <option *ngFor="let state of states" [ngValue]="state"> 
      {{ state.abbrev }} 
     </option> 
     </select> 
    </form> 

     <p>Form value: {{ form.value | json }}</p> 
     <!-- {state: {name: 'New York', abbrev: 'NY'} } --> 
    `, 
}) 
export class ReactiveSelectComp { 
    states = [ 
    {name: 'Arizona', abbrev: 'AZ'}, 
    {name: 'California', abbrev: 'CA'}, 
    {name: 'Colorado', abbrev: 'CO'}, 
    {name: 'New York', abbrev: 'NY'}, 
    {name: 'Pennsylvania', abbrev: 'PA'}, 
    ]; 

    form = new FormGroup({ 
    state: new FormControl(this.states[3]), 
    }); 
} 
Verwandte Themen