Ich habe ein Formular, das mit Verschachtelung erstellt wurde, das eine Eingabe mit einer Telefonnummer und eine Auswahl zeigt, um den Typ der Telefonnummer auszuwählen. Anfangs habe ich eine Reihe von Werten, die ich beim Erstellen der FormGroup zuweisen möchte. Aber während die Auswahlfelder ihre Optionen erhalten, wird der vordefinierte Wert nicht ausgewählt. Auch die Eingabebox erhält ihren vordefinierten Wert nicht.Warum die Eingabe- und Auswahlfelder ihre Werte nicht ausfüllen
In app.component.ts:57
nehme ich meine Reihe vordefinierter Werte und analysiere sie einzeln und rufe die Methode addPhoneForm
auf.
Die Methode addPhoneForm
verwendet auch die initPhoneForm
Methode. Diese zusammen erstellen das Telefonformular, das in Zeile 33 von app.component.html
zu sehen ist.
Ich denke, der Grund, es ist nicht zu werden ausgefüllt, weil ich auch den folgenden Code in meinem PhoneDetailComponent
Konstruktor Durchführung bin:
this.phoneForm = this.formBuilder.group({
phoneNumber: new FormControl(),
phoneType: new FormControl()
})
Aber ohne dieses Stück Code, erhalte ich eine Fehlermeldung, dass formGroup erwartet eine Formulargruppe.
Hier ist der PLNKR von dem, woran ich arbeite. http://plnkr.co/edit/qv1BX7WtpYhw5B92SuoC?p=preview
- Codeblock -
- Telefon detail.component.ts
export class PhoneDetailComponent {
phoneTypes: EnumProperty[] = [];
phoneForm: FormGroup;
@Input('group')
@Output() rawChange: EventEmitter<string> = new EventEmitter<string>();
constructor(private phoneTypeService: PhoneTypeService,
private formBuilder: FormBuilder) {
this.getPhoneTypes();
this.phoneForm = this.formBuilder.group({
phoneNumber: new FormControl(),
phoneType: new FormControl()
})
}
private getPhoneTypes() {
this.phoneTypeService.get()
.then(phoneTypes => {
this.phoneTypes = phoneTypes;
})
}
}
- app.component.html: 31-36
<div formArrayName="phones">
<div *ngFor="let phone of updateProfileForm.controls.phones.controls; let i=index">
<phone [group]="updateProfileForm.controls.phones.controls[i]"></phone>
</div>
</div>
<a (click)="addPhoneForm()">+ Add another phone number</a>
- - app.component.ts (nur relevante Teile)
export class AppComponent {
private version: any;
updateProfileForm: FormGroup;
phoneNumbers: PhoneModel[] = [
{ phoneNumber: "843-555-5849", type: "sms" },
{ phoneNumber: "756-555-7643", type: "home"},
{ phoneNumber: "395-555-9324", type: "tty" },
{ phoneNumber: "621-555-2690", type: "sms" }
]
private phoneValidator = Validators.compose([
Validators.minLength(7),
Validators.maxLength(16),
Validators.pattern(/^\(?([0-9]{3})\)?[-. ]?([0-9]{3})[-. ]?([0-9]{4})$/) ]);
constructor(http: Http,
private formBuilder: FormBuilder) {
// Display the currently used Material 2 version.
this.version = http
.get('https://api.github.com/repos/angular/material2-builds/commits/HEAD')
.map(res => res.json())
this.updateProfileForm = this.formBuilder.group({
personNames: ['', []],
phones: this.formBuilder.array([])
});
console.log("Loading phones");
this.phoneNumbers.forEach(p => this.addPhoneForm(p));
}
private addPhoneForm(p?: PhoneModel) {
if (!p) {
p.phoneNumber = "";
p.type = PHONE_TYPES[0];
}
const control = <FormArray>this.updateProfileForm.controls['phones'];
const phnCtrl = this.initPhoneForm(p);
console.log(p);
control.push(phnCtrl);
}
private initPhoneForm(phoneModel: PhoneModel) {
console.log(phoneModel);
return this.formBuilder.group({
phoneNumber: [ phoneModel.phoneNumber, this.phoneValidator ],
phoneType: [ phoneModel.type, [] ]
});
}
}