Comprueba si hay un elemento duplicado en el campo FormGroups en un formulario reactivo de Angular.
Mientras guardo todas mis filas de cuadrícula, necesito verificar si hay un duplicado para un campo de columna específico.
(this.formGroups.get(‘items’) as FormArray).controls.forEach((item) => {
console.log(item.value.attributeDisplayName);
});
Necesito detener el envío del formulario mostrando una alerta o algo similar cuando hay un valor duplicado para attributeDisplayName. ¿Cómo puedo verificar eso en el bucle forEach actual? Gracias.
Estoy utilizando componentes angulares de kendo en mi marcado HTML y no estoy usando la etiqueta de formulario. A continuación se muestra un ejemplo de declaración de columna.
<div *ngif="formGroup.get(column.field).errors && (formGroup.get(column.field).dirty || formGroup.get(column.field).touched)">
<span style="color:red" class="k-icon k-i-warning"></span>
<span style="color:red">CUSTOM FIELD LABEL es un campo obligatorio</span>
</div>
</ng-template>
</kendo-grid-column>
A continuación se muestra la declaración de FormGroup en el archivo .ts.
public formGroup: FormGroup;
public formGroups: FormGroup = new FormGroup({ items: new FormArray([]) });
public createFormGroup = (dataItem) =>
new FormGroup({
atrributeId: new FormControl(dataItem.atrributeId),
objectType: new FormControl(dataItem.objectType, Validators.required),
attributeDisplayName: new FormControl(dataItem.attributeDisplayName, Validators.required),
dataType: new FormControl(dataItem.dataType, Validators.required),
inputValues: new FormControl(dataItem.inputValues, [Validators.required, InputValuesValidator]),
isGridEligible: new FormControl(dataItem.isGridEligible, Validators.required),
isInvoiceEligible: new FormControl(dataItem.isInvoiceEligible, Validators.required),
});
Una función de ejemplo donde uso este FormGroup
public editRows(grid) {
this.isEdited = true;
let currentRow = 0;
let rows: any = grid.data.data;
for (let i = 0; i < rows.length; i++) {
const formGroup = this.createFormGroup(rows[i]);
this.formGroup = formGroup;
(this.formGroups.get('items') as FormArray).push(formGroup);
grid.editRow(currentRow, formGroup, {skipFocus: true});
currentRow++;
}
}
davy.ai
Para comprobar si existen valores duplicados para
attributeDisplayName
en el bucleforEach
actual, puede utilizar el métodofindIndex
para comprobar si el valor ya existe en elFormArray
: