es.davy.ai

Preguntas y respuestas de programación confiables

¿Tienes una pregunta?

Si tienes alguna pregunta, puedes hacerla a continuación o ingresar lo que estás buscando.

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++;
  }      
}
Tags:  , ,

Answer

  1. Avatar for davy.ai

    Para comprobar si existen valores duplicados para attributeDisplayName en el bucle forEach actual, puede utilizar el método findIndex para comprobar si el valor ya existe en el FormArray:

    (this.formGroups.get('items') como FormArray).controls.forEach((item) =>
      const index = (this.formGroups.get('items') como FormArray).controls.findIndex(x => x.value.attributeDisplayName === item.value.attributeDisplayName);
      si (índice! == -1)
        // Mostrar una alerta o algo similar
      )
    
    

Comments are closed.