Edición y validación de cuadrículas jerárquicas Angular
La edición de la cuadrícula jerárquica expone un mecanismo de validación integrado de la entrada del usuario al editar celdas o filas. Amplía la funcionalidad de validación de Angular Form para permitir una integración más sencilla con una funcionalidad conocida. Cuando cambia el estado del editor, se aplican indicadores visuales a la celda editada.
最速で機能豊富な Angular Data Grid は、ページング、ソート、フィルタリング、グループ化、PDF および Excel へのエクスポートなどの機能を提供します。究極のアプリ構築エクスペリエンスとデータ操作に必要なすべてが揃っています。
Configurar mediante configuración basada en plantillas
Ampliamos algunas de las directivas de validación Angular Forms para que funcionen directamente con IgxColumn. Los mismos validadores están disponibles como atributos que se pueden configurar de forma declarativa en igx-column. Los siguientes validadores son compatibles de manera predeterminada:
requerido
mín.
máximo
correo electrónico
longitud mínima
longitud máxima
patrón
Para validar que se establecerá una entrada de columna y que el valor se formateará como un correo electrónico, puede utilizar las directivas relacionadas:
¿Te gusta esta muestra? Obtenga acceso a nuestro kit de herramientas de Ignite UI for Angular completo y comience a crear sus propias aplicaciones en minutos. Descárgalo gratis.
Configurar mediante formularios reactivos
Exponemos el FormGroup que se utilizará para la validación cuando comience la edición en una fila/celda a través de un evento formGroupCreated. Puedes modificarlo agregando tus propios validadores para los campos relacionados:
La cuadrícula expone un servicio de validación a través de la propiedad validation. Ese servicio tiene las siguientes API públicas:
valid: devuelve si el estado de validación de la cuadrícula es válido.
getInvalid: devuelve registros con estados no válidos.
clear: borra el estado para el registro por identificación o borra todos los estados si no se proporciona ninguna identificación.
markAsTouched: marca el registro/campo relacionado como tocado.
Los estados no válidos persistirán hasta que los errores de validación que contengan se corrijan de acuerdo con la regla de validación o se borren.
Activadores de validación
La validación se activará en los siguientes escenarios:
Mientras se edita a través del editor de celdas según el validationTrigger de la cuadrícula. Ya sea al change mientras se escribe en el editor, o al blur cuando el editor pierde el foco o se cierra.
Cuando se utiliza la edición por lotes y la API undo / redo del servicio de transacciones.
Nota: La validación no se activará para los registros que no se hayan editado mediante la entrada del usuario o mediante la API de edición. Los indicadores visuales en la celda solo se mostrarán si la entrada relacionada se considera tocada, ya sea mediante la interacción del usuario o mediante la API markAsTouched del servicio de validación.
Opciones de personalización de la validación de cuadrícula jerárquica Angular
Establecer un validador personalizado
Puede definir su propia directiva de validación para usar en una <igx-column> en la plantilla.
Una vez que esté definido y agregado en el módulo de su aplicación, puede configurarlo de forma declarativa en una columna determinada en la cuadrícula:
Puede definir su propia plantilla de error personalizada que se mostrará en la información sobre herramientas de error cuando la celda entre en un estado no válido. Esto es útil en escenarios en los que desea agregar su propio mensaje de error personalizado o cambiar la apariencia o el contenido del mensaje.
<igx-column... ><ng-templateigxCellValidationErrorlet-cell='cell'let-defaultErr="defaultErrorTemplate"><ng-container *ngTemplateOutlet="defaultErr"></ng-container><div *ngIf="cell.validation.errors?.['phoneFormat']">
Please enter correct phone format
</div></ng-template></igx-column>html
Evitar salir del modo de edición en estado no válido
En algunos casos, es posible que desee impedir el envío de un valor no válido en los datos. En esos escenarios, puede usar los eventos cellEdit o rowEdit y cancelar el evento en caso de que el nuevo valor no sea válido. Los argumentos de ambos eventos tienen una propiedad valid y pueden cancelarse en consecuencia. Cómo se utiliza se puede ver en el ejemplo de Validación entre campos.
<divclass="grid-wrapper"><igx-hierarchical-grid #hierarchicalGrid [height]="'570px'" [width]="'100%'" [data]="data"
[primaryKey]="'CustomerID'" [batchEditing]="true" [rowEditable]="true"
(formGroupCreated)="formCreateHandler($event)"><igx-columnfield="CustomerID" [editable]="false"></igx-column><igx-columnfield="CompanyName" [editable]="true"required></igx-column><igx-columnfield="ContactName" [editable]="true"required></igx-column><igx-columnfield="ContactTitle" [editable]="true"required></igx-column><igx-columnfield="Phone" [editable]="true"requiredphoneFormat="^[^a-zA-Z]*$"><ng-templateigxCellValidationErrorlet-cell='cell'let-defaultErr="defaultErrorTemplate"><ng-container *ngTemplateOutlet="defaultErr"></ng-container>
@if (cell.validation.errors?.['phoneFormat']) {
<div>
Please enter correct phone format
</div>
}
</ng-template></igx-column><igx-columnfield="Fax" [editable]="true"></igx-column><igx-row-island #childGrid [height]="null" [key]="'Orders'" [primaryKey]="'OrderID'" [autoGenerate]="false"
[batchEditing]="true" [rowEditable]="true" (formGroupCreated)="formCreateHandler($event)"><igx-grid-toolbar *igxGridToolbar="let grid"><buttonigxButton [disabled]="!grid.transactions.canUndo" (click)="undo(grid)">Undo</button><buttonigxButton [disabled]="!grid.transactions.canRedo" (click)="redo(grid)">Redo</button></igx-grid-toolbar><igx-column [editable]="false"field="OrderID"></igx-column><igx-column [editable]="true"field="EmployeeID" [editable]="true"required></igx-column><igx-column [editable]="true"field="OrderDate" [dataType]="'date'" [editable]="true"required><ng-templateigxCellValidationErrorlet-cell='cell'let-defaultErr="defaultErrorTemplate"><ng-container *ngTemplateOutlet="defaultErr"></ng-container>
@if (cell.validation.errors?.['futureDate']) {
<div>
The date cannot be in the future.
</div>
}
</ng-template></igx-column><igx-column [editable]="true"field="RequiredDate" [dataType]="'date'" [editable]="true"required><ng-templateigxCellValidationErrorlet-cell='cell'let-defaultErr="defaultErrorTemplate"><ng-container *ngTemplateOutlet="defaultErr"></ng-container>
@if (cell.validation.errors?.['futureDate']) {
<div>
The date cannot be in the future.
</div>
}
@if (cell.validation.errors?.['pastDate']) {
<div>
The date cannot be before the 5th of November 2010
</div>
}
</ng-template></igx-column><igx-columnfield="ShippedDate" [dataType]="'date'" [editable]="true"><ng-templateigxCellValidationErrorlet-cell='cell'let-defaultErr="defaultErrorTemplate"><ng-container *ngTemplateOutlet="defaultErr"></ng-container>
@if (cell.validation.errors?.['futureDate']) {
<div>
The date cannot be in the future.
</div>
}
@if (cell.validation.errors?.['pastDate']) {
<div>
The date cannot be before the 5th of November 2010
</div>
}
</ng-template></igx-column><igx-columnfield="ShipVia" [selectable]="false" [editable]="true"></igx-column><igx-columnfield="Freight" [selectable]="false" [editable]="true"></igx-column></igx-row-island></igx-hierarchical-grid><divclass="buttons-wrapper"><buttonigxButton [disabled]="!hierarchicalGrid.transactions.canUndo" (click)="undo(hierarchicalGrid)">Undo</button><buttonigxButton [disabled]="!hierarchicalGrid.transactions.canRedo" (click)="redo(hierarchicalGrid)">Redo</button><buttonigxButton [disabled]="!hasTransactions" (click)="commit()">Commit</button></div></div>html
En algunos escenarios, la validación de un campo puede depender del valor de otro campo en el registro. En ese caso, se puede utilizar un validador personalizado para comparar los valores en el registro a través de su FormGroup compartido.
Se pueden agregar validadores de campos cruzados al formGroup en el evento formGroupCreated. En ellos se pueden comparar varios campos para comprobar su validez.
En el siguiente ejemplo, utilizaremos la plantilla expuesta para el mensaje de validación, que aparece en una información sobre herramientas y anula el color del error para modificar la apariencia predeterminada de la validación. También aplicaremos estilo al fondo de las filas no válidas para hacerlas más distintas.
Importar tema
La forma más fácil de diseñar y acceder a las variables css es definir estilos en nuestro app archivo de estilo global (típicamente styles.scss). Lo primero que tenemos que hacer es importar el themes/index archivo, esto nos da acceso a todas las potentes herramientas del framework Ignite UI for Angular Sass:
@use"igniteui-angular/theming" as *;
// IMPORTANT: Prior to Ignite UI for Angular version 13 use:// @import '~igniteui-angular/lib/core/styles/themes/index';scss
Incluir los estilos
Para cambiar el color del error puedes usar la variable css--igx-error-500:
--igx-error-500: 34, 80%, 63%;
scss
Plantillas personalizadas
Cambiar la plantilla de error predeterminada permite configurar clases y estilos personalizados:
CuandovalidationTrigger es borroso,editValue y la validación se activará solo después de que el editor esté borroso.
La razón es que esto utiliza el formControlupdateOn propiedad. Esto determina el evento en el que formControl se actualizará y activará los validadores relacionados.