Основная проблема заключается в том, что вы используете 2 разных массива в своем компоненте: один - массив controls в экземпляре FormArray
(давайте назовем его ModelArray ) итот, который возвращается после обработки фильтра (назовем его ViewArray ).
Они оба имеют одинаковые FormGroup
экземпляры, но в разных порядках.Вы используете ViewArray для генерации своего представления и сопоставляете его индексы с помощью директив FormArrayName
и FormGroupName
с элементами в ModelArray .
Для индекса I с 0 , в конечном итоге вы увидите значения FormGroup
instance A <= ViewArray [I] </em> и привязкупредставление вводит в экземпляр B <= ModelArray [I] </em>, с возможностью A = B === false
Вы можете преодолеть это, связавFormGroup
экземпляры для FormArrayName
с использованием FormGroupDirective
вместо директивы FormGroupName
следующим образом:
<div class="form-group"
formArrayName="permissions">
<label class="checkboxLabel"
*ngFor="let permissionGroup of permissionsControl.controls | LockFilter: filter.value; index as i"
[formGroup]="permissionGroup">
<input type="checkbox"
formControlName="selected">
({{ i }}){{permissionGroup.value.label}} ({{permissionGroup.value.id}})
</label>
</div>
Рабочий пример можно найти в этом блице