Я работаю над проектом, который использует много вложенных реактивных форм, и я хочу создать элемент управления, который оборачивает и поле Mat-Form-Field, и входные данные в один компонент, но когда я пробую это в своей форме, япродолжаю получать ошибки.
Я думаю, что проблема в том, что элемент управления находится в массиве, так как кажется, что он работает сам по себе.
В настоящее время с кодом ниже я получаю следующую ошибкуmessage BasicInputComponent.html: 2 ОШИБКА: Ошибка: не удается найти элемент управления с именем: 'firstName'
Я также пытался использовать ControlValueAccessor, но я не уверен, что это правильный путь, и когдаЯ попробовал это, я не мог заставить mat-from-field признать, что он не действителен.
Я понимаю, что пример довольно прост, но мне действительно нужен элемент управления, чтобы его можно было использовать в массивах формтак что я могу использовать его в других местах системы.
Дочерний компонент html:
<mat-form-field floatLabel="never" class="ng-untouched ng-pristine ng-invalid">
<input matInput #input [placeholder]="placeholder" [type]="type" [attr.maxlength]="maxlength" type="text" [formControlName]="controlName"/>
<mat-hint *ngIf="maxlength" align="end">{{input.value?.length || 0}}/{{maxlength}}</mat-hint>
</mat-form-field>
Дочерний компонент ts
@Component({
selector: 'app-basic-input',
templateUrl: './basic-input.component.html',
styleUrls: ['./basic-input.component.css'],
viewProviders: [{ provide: ControlContainer, useExisting: FormGroupDirective }]
})
export class BasicInputComponent {
@Input() placeholder: string;
@Input() controlName: string;
@Input() maxlength: number | null;
constructor() {}
}
Родительский html:
<form [formGroup]="vehicle">
<div formArrayName="occupants" *ngFor="let occupant of vehicle.get('occupants')['controls']; let i = index;">
<div [formGroupName]="i">
<app-basic-input placeholder="First Name" controlName="firstName" maxlength="25"></app-basic-input>
</div>
</div>
</form>
родительский тс:
vehicle= this.fb.group({
occupants: this.fb.array([
this.fb.group({
firstName: ['', Validators.required],
lastName: ['', Validators.required]
})
])
})