Fijación de columnas de rejilla Angular
Se pueden fijar una columna o varias columnas en el lado izquierdo o derecho de la cuadrícula de interfaz de usuario Angular. La fijación de columnas en Ignite UI for Angular permite a los usuarios finales bloquear columnas en un orden particular, esto les permitirá verlas mientras se desplazan horizontalmente por la cuadrícula. Material UI Grid tiene una interfaz de usuario de fijación de columnas incorporada, que se puede usar a través de la barra de herramientas de Grid para cambiar el estado de fijación de las columnas. Además, puede definir una interfaz de usuario personalizada y cambiar el estado de fijación de las columnas a través de la API de fijación de columnas.
Angular Grid Column Pinning Example
Column Pinning API
La fijación de columnas se controla a través de la entrada pinned
de igx-column
. Las columnas fijadas se representan en el lado izquierdo de la cuadrícula de forma predeterminada y permanecen fijas mediante el desplazamiento horizontal de las columnas no fijadas en el cuerpo de la cuadrícula.
<igx-grid #grid1 [data]="data | async" [width]="700px" [autoGenerate]="false" (columnInit)="initColumns($event)"
(selected)="selectCell($event)">
<igx-column [field]="Name" [pinned]="true"></igx-column>
<igx-column [field]="AthleteNumber"></igx-column>
<igx-column [field]="TrackProgress"></igx-column>
<igx-paginator [perPage]="10">
</igx-paginator>
</igx-grid>
También puede utilizar los métodos pinColumn
o unpinColumn
del Grid del IgxGridComponent
para fijar o desanclar columnas por su nombre de campo:
this.grid.pinColumn('AthleteNumber');
this.grid.unpinColumn('Name');
Ambos métodos devuelven un valor booleano que indica si su operación respectiva fue exitosa o no. Generalmente la razón por la que fallan es que la columna ya se encuentra en el estado deseado.
Una columna está fijada a la derecha de la columna fijada más a la derecha. Se puede cambiar el orden de las columnas fijadas suscribiéndose al evento columnPin
y cambiando la propiedad insertAtIndex
de los argumentos del evento al índice de posición deseado.
<igx-grid #grid1 [data]="data | async" [autoGenerate]="true" (columnPin)="columnPinning($event)"></igx-grid>
public columnPinning(event) {
if (event.column.field === 'Name') {
event.insertAtIndex = 0;
}
}
Pinning Position
Puede cambiar la posición de fijación de la columna mediante la opción de configuración pinning
. Le permite establecer la posición de las columnas en Inicio o Fin. Cuando se establece en Fin, las columnas se representan al final de la cuadrícula, después de las columnas sin fijar. Las columnas no fijadas se pueden desplazar horizontalmente, mientras que las columnas fijadas permanecen fijas a la derecha.
<igx-grid [data]="data" [autoGenerate]="true" [pinning]="pinningConfig"></igx-grid>
public pinningConfig: IPinningConfig = { columns: ColumnPinningPosition.End };
Demo
Custom Column Pinning UI
Puede definir su interfaz de usuario personalizada y cambiar el estado del pin de las columnas a través de la API relacionada.
Digamos que en lugar de una barra de herramientas le gustaría definir íconos de pin en los encabezados de las columnas en los que el usuario final puede hacer clic para cambiar el estado del pin de la columna en particular. Esto se puede hacer creando una plantilla de encabezado para la columna con un ícono personalizado.
<igx-grid #grid1 [data]="data" [width]="'100%'" [height]="'500px'">
<igx-column #col *ngFor="let c of columns" [field]="c.field" [header]="c.header" [width]="c.width" [pinned]='c.pinned'
[hidden]='c.hidden' [headerClasses]="'customHeaderSyle'">
<ng-template igxHeader>
<div class="title-inner">
<span style="float:left">{{col.header}}</span>
<igx-icon class="pin-icon" fontSet="fas" name="fa-thumbtack" (click)="toggleColumn(col)"></igx-icon>
</div>
</ng-template>
</igx-column>
</igx-grid>
Al hacer clic en el icono personalizado, el estado del pin de la columna relacionada se puede cambiar utilizando los métodos API de la columna.
public toggleColumn(col: ColumnType) {
col.pinned ? col.unpin() : col.pin();
}
Demo
Pinning Limitations
- Establecer el ancho de las columnas en porcentaje (%) explícitamente hace que el cuerpo de la cuadrícula y el contenido del encabezado estén desalineados cuando hay columnas fijadas. Para que la fijación de columnas funcione correctamente, los anchos de las columnas deben estar en píxeles (px) o ser asignados automáticamente por la cuadrícula.
Estilismo
igxGrid permite diseñar a través de la Ignite UI for Angular. El tema de la grilla expone una amplia variedad de propiedades, que permiten la personalización de todas las características de la grilla.
En los pasos siguientes, veremos los pasos para personalizar el estilo de fijación de la cuadrícula.
Importing global theme
Para comenzar la personalización de la función Fijar, debe importar el archivo index
, donde se encuentran todas las funciones de estilo y mixins.
@use "igniteui-angular/theming" as *;
// IMPORTANT: Prior to Ignite UI for Angular version 13 use:
// @import '~igniteui-angular/lib/core/styles/themes/index';
Defining custom theme
A continuación, cree un nuevo tema, que extienda el grid-theme
y acepte los parámetros necesarios para personalizar la función Fijar como desee.
$custom-theme: grid-theme(
/* Pinning properties that affect styling */
$pinned-border-width: 5px,
$pinned-border-style: double,
$pinned-border-color: #FFCD0F,
$cell-active-border-color: #FFCD0F
/* add other features properties here... */
);
Defining a custom color palette
En el enfoque descrito anteriormente, los valores de color estaban codificados. Alternativamente, puede lograr una mayor flexibilidad utilizando las funciones igx-palette
e igx-color
.
igx-palette
genera una paleta de colores basada en los colores primarios y secundarios proporcionados.
$primary-color: #292826;
$secondary-color: #ffcd0f;
$custom-palette: palette(
$primary: $primary-color,
$secondary: $secondary-color
);
Una vez generada una paleta personalizada, la función igx-color
se puede utilizar para obtener diferentes variedades de colores primarios y secundarios.
$custom-theme: grid-theme(
$pinned-border-width: 5px,
$pinned-border-style: double,
$pinned-border-color: color($custom-palette, "secondary", 500),
$cell-active-border-color: color($custom-palette, "secondary", 500)
);
El $custom-theme
contiene las mismas propiedades que el de la sección anterior, pero esta vez los colores no están codificados. En su lugar, se utilizó la igx-palette
personalizada y los colores se obtuvieron a través de sus colores primarios y secundarios, con una variante de color determinada.
Defining custom schemas
Puede ir aún más lejos y crear una estructura flexible que tenga todos los beneficios de un esquema. El esquema es la receta de un tema.
Amplíe uno de los dos esquemas predefinidos que se proporcionan para cada componente. En nuestro caso, usaríamos $_light_grid
.
$custom-grid-schema: extend($_light-grid,(
pinned-border-width: 5px,
pinned-border-style: double,
pinned-border-color: color:("secondary", 500),
cell-active-border-color: color:("secondary", 500)
));
Para que se aplique el esquema personalizado, se deben extender los globales light
u dark
. En realidad, todo el proceso consiste en proporcionar un componente con un esquema personalizado y luego agregarlo al tema del componente respectivo.
$my-custom-schema: extend($light-schema, (
igx-grid: $custom-grid-schema
));
$custom-theme: grid-theme(
$palette: $custom-palette,
$schema: $my-custom-schema
);
Applying the custom theme
La forma más sencilla de aplicar su tema es con una declaración @include
sass
en el archivo de estilos global:
@include grid($custom-theme);
Scoped component theme
Para que el tema personalizado afecte solo a un componente específico, puede mover todos los estilos que acaba de definir desde el archivo de estilos globales al archivo de estilo del componente personalizado (incluida la importación del archivo index
).
De esta manera, debido a ViewEncapsulation de Angular, sus estilos se aplicarán solo a su componente personalizado.
Note
Si el componente utiliza una ViewEncapsulation Emulated
, es necesario penetrar esta encapsulación usando::ng-deep
para poder diseñar la cuadrícula.
Note
Envuelva la declaración dentro de un selector:host
para evitar que sus estilos afecten a elementos fuera de nuestro componente:
:host {
::ng-deep {
@include grid($custom-theme);
}
}
Demo
Note
La muestra no se verá afectada por el tema global seleccionado en Change Theme
.
API References
Additional Resources
- Descripción general de la cuadrícula
- Virtualización y rendimiento
- Paginación
- Filtración
- Clasificación
- resúmenes
- Columna en movimiento
- Cambio de tamaño de columna
- Selección