У меня проблемы с использованием patchValue с formArray. У меня есть пользовательский выбор, сделанный с <ul>
, <li>
, щелчок по опции выполняет метод, который должен исправить идентификатор опции, выбранной в <input type="hidden" />
, который будет содержать значение свойства в formarray.
Вот как строится форма:
this.roleForm = this.fb.group({
profiles: this.fb.array([ this.fb.group({perfil: '', accion: ''}) ])
})
Это метод добавления новых профилей в массив:
addProfile() {
const prof = this.roleForm.get('profiles') as FormArray;
prof.push(this.fb.group({
perfil: [''],
accion: ['']
}))
}
И это html :
<div class="col-md-8" formArrayName="profiles">
<div class="row" *ngFor="let profile of getProfiles(); let i = index">
<div class="col-md-6" [formGroupName]="i">
<div class="col-12">
<div class="card card-primary bg-white">
<div class="card-header h4">
Perfil
</div>
<ul class="list-group list-group-flush register h5 scroll-list">
<li *ngFor="let profileType of profileTypes; index as i"
class="list-group-item rounded-0 pointer"
[ngClass]="{'selected bg-primary text-white font-weight-bold': this.selectedProfile === profileType.profileId}"
(click)="selectProfile(profileType.profileId, i)">
{{profileType.profileDescription}}
</li>
</ul>
<input formControlName="perfil" type="text" />
</div>
</div>
</div>
</div>
</div>
РЕДАКТИРОВАТЬ:
Я должен был бы использовать patchValue в этом методе, чтобы установить выбранное значение на входе с тем же индексом. Но я не могу заставить метод at () работать, он всегда возвращает мне неопределенное значение:
selectProfile(profileType.profileId, i) {
let x = (<FormArray>this.roleForm.get('profiles')).at(i);
console.log(x)
}