Descripción general del componente Angular Query Builder
Angular Query Builder es parte de nuestros Componentes Angular y proporciona una interfaz de usuario enriquecida que permite a los desarrolladores crear consultas complejas de filtrado de datos para un conjunto de datos específico. Con este componente pueden construir un árbol de expresiones y establecer condiciones Y/O entre ellas con editores y listas de condiciones determinadas por el tipo de datos de cada campo. Luego, el árbol de expresiones se puede transformar fácilmente en una consulta en el formato que admite el backend.
El componente IgxQueryBuilderComponent
proporciona una forma de crear consultas complejas a través de la interfaz de usuario. Al especificar operadores, condiciones y valores Y/O, el usuario crea un árbol de expresión que describe la consulta.
Angular Query Builder Example
Hemos creado este ejemplo Angular Query Builder para mostrarle las funcionalidades predeterminadas del componente Angular Query Builder. Haga clic en el botón más para agregar condiciones, grupo "y" y grupo "o". Navegue por las barras laterales para desagrupar o eliminar.
Getting Started with Ignite UI for Angular Query Builder
Para comenzar con el componente Ignite UI for Angular Query Builder, primero debe instalar Ignite UI for Angular. En una aplicación Angular existente, escriba el siguiente comando:
ng add igniteui-angular
Para obtener una introducción completa a la Ignite UI for Angular, lea el tema de introducción.
El siguiente paso es importar IgxQueryBuilderModule
en el archivo app.module.ts.
// app.module.ts
import { IgxQueryBuilderModule } from 'igniteui-angular';
// import { IgxQueryBuilderModule } from '@infragistics/igniteui-angular'; for licensed package
@NgModule({
...
imports: [..., IgxQueryBuilderModule],
...
})
export class AppModule {}
Alternativamente, a partir de 16.0.0
, puede importar IgxQueryBuilderComponent
como una dependencia independiente o usar el token IGX_QUERY_BUILDER_DIRECTIVES
para importar el componente y todos sus componentes y directivas de soporte.
// home.component.ts
import { IGX_QUERY_BUILDER_DIRECTIVES, FilteringExpressionsTree, FieldType } from 'igniteui-angular';
// import { IGX_QUERY_BUILDER_DIRECTIVES, FilteringExpressionsTree, FieldType } from '@infragistics/igniteui-angular'; for licensed package
@Component({
selector: 'app-home',
template: `
<igx-query-builder #queryBuilder
[fields]="fields"
[(expressionTree)]="expressionTree"
(expressionTreeChange)="onExpressionTreeChange()">
</igx-query-builder>
`,
styleUrls: ['home.component.scss'],
standalone: true,
imports: [IGX_QUERY_BUILDER_DIRECTIVES]
/* or imports: [IgxQueryBuilderComponent] */
})
export class HomeComponent {
public expressionTree: FilteringExpressionsTree;
public fields: FieldType [];
public onExpressionTreeChange() {
...
}
}
Ahora que ha importado la Ignite UI for Angular Query Builder, puede comenzar a usar el componente igx-query-builder
.
Using the Angular Query Builder
Si inicialmente no se establece ningún árbol de expresión, comience creando un grupo de condiciones vinculadas con AND
u OR
. Después de eso, se pueden agregar condiciones o subgrupos.
Para agregar una condición, un campo, un operando basado en el tipo de datos del campo y un valor si el operando no es unario. Una vez confirmada la condición, aparece un chip con la información de la condición. Al pasar el cursor sobre el chip o hacer clic en él, tiene la opción de modificarlo o agregar otra condición o grupo inmediatamente después.
Si selecciona más de un chip de condición, aparece un menú contextual con opciones para crear un grupo o eliminar las consultas. Si elige crear un grupo con las condiciones seleccionadas, el grupo recién creado aparecerá donde se colocó la condición seleccionada más alta.
Para seleccionar un grupo, también puede hacer clic en su línea vertical, que está coloreada según la condición de vinculación (AND
u OR
). Si se selecciona un solo grupo, obtienes un menú contextual con opciones para cambiar su lógica, desagruparlo o eliminarlo.
Puede comenzar a usar el componente configurando la propiedad fields
en una matriz que describa el nombre del campo y su tipo de datos. Asignará automáticamente los operandos correspondientes según el tipo de datos. El Generador de consultas tiene la propiedad de entrada expressionTree
. Puede usarlo para establecer un estado inicial del control y acceder a la lógica de filtrado especificada por el usuario.
ngAfterViewInit(): void {
const tree = new FilteringExpressionsTree(FilteringLogic.And);
tree.filteringOperands.push({
fieldName: 'ID',
condition: IgxStringFilteringOperand.instance().condition('contains'),
searchVal: 'a',
ignoreCase: true
});
const subTree = new FilteringExpressionsTree(FilteringLogic.Or);
subTree.filteringOperands.push({
fieldName: 'ContactTitle',
condition: IgxStringFilteringOperand.instance().condition('doesNotContain'),
searchVal: 'b',
ignoreCase: true
});
subTree.filteringOperands.push({
fieldName: 'CompanyName',
condition: IgxStringFilteringOperand.instance().condition('startsWith'),
searchVal: 'c',
ignoreCase: true
});
tree.filteringOperands.push(subTree);
this.queryBuilder.expressionTree = tree;
}
expressionTree
es una propiedad vinculable de dos vías, lo que significa que se implementa una salida expressionTreeChange
correspondiente que se emite cuando el usuario final cambia la interfaz de usuario creando, editando o eliminando condiciones. También se puede suscribir por separado para recibir notificaciones y reaccionar ante dichos cambios.
<igx-query-builder #queryBuilder
[fields]="fields"
[(expressionTree)]="expressionTree"
(expressionTreeChange)="onExpressionTreeChange()">
</igx-query-builder>
Estilismo
Para comenzar a diseñar el Generador de consultas, necesitamos importar el archivo index
, donde se encuentran todas las funciones del tema y los mixins de componentes:
@use "igniteui-angular/theming" as *;
// IMPORTANT: Prior to Ignite UI for Angular version 13 use:
// @import '~igniteui-angular/lib/core/styles/themes/index';
El Generador de consultas toma el color de fondo de su tema, utilizando el parámetro background
. Para cambiar el fondo necesitamos crear un tema personalizado:
$custom-query-builder: query-builder-theme(
$background: #FFCD0F
);
Dado que tenemos otros componentes dentro del Generador de consultas, como botones, chips, menús desplegables y entradas, necesitamos crear un tema separado para cada uno:
$custom-button: button-theme(
$disabled-color: gray,
...
);
$custom-button-group: button-group-theme(
$item-background: #292826,
...
);
$custom-input-group: input-group-theme(
$box-background: #4a4a4a,
...
);
$custom-chip: chip-theme(
$background: #FFCD0F,
...
);
$custom-drop-down: drop-down-theme(
$background-color: #292826,
...
);
En este ejemplo solo cambiamos algunos de los parámetros para los componentes enumerados, pero los button-theme
, button-group-theme
, chip-theme
, drop-down-theme
y input-group-theme
proporcionan muchos más parámetros para controlar sus componentes. estilo respectivo.
El último paso es incluir los mixins de componentes, cada uno con su respectiva temática. También agregaremos algunos estilos para otros elementos dentro del generador de consultas.
@include query-builder($custom-query-builder);
igx-query-builder {
@include button($custom-button);
@include button-group($custom-button-group);
@include input-group($custom-input-group);
@include chip($custom-chip);
@include drop-down($custom-drop-down);
.igx-filter-empty__title {
color: #FFCD0F
}
.igx-query-builder__header {
color: #FFCD0F
}
.igx-filter-tree__expression-actions igx-icon {
color: #FFCD0F
}
.igx-filter-tree__expression-actions igx-icon:hover {
color: #ffe482
}
.igx-filter-tree__expression-actions igx-icon:focus {
color: #ffe482
}
.igx-filter-contextual-menu {
border: 1px solid #FFCD0F
}
.igx-filter-contextual-menu__close-btn {
position: absolute !important;
background: #292826 !important;
border-color: #FFCD0F !important;
}
.igx-input-group__input::placeholder {
color: gray;
}
}
Note
Analizamos la mayoría de los mixins de componentes dentro de igx-query-builder
, de modo que estos temas personalizados afectarán solo a los componentes anidados en Query Builder. De lo contrario, otros botones, chips, entradas y menús desplegables de la aplicación también se verían afectados.
Note
Si el componente utiliza una ViewEncapsulation Emulated
, es necesario penetrate
esta encapsulación usando::ng-deep
:
:host {
::ng-deep {
@include drop-down($custom-drop-down);
@include query-builder($custom-query-builder);
igx-query-builder {
@include button($custom-button);
@include button-group($custom-button-group);
@include input-group($custom-input-group);
@include chip($custom-chip);
.igx-input-group__input::placeholder {
color: gray;
}
.igx-filter-empty__title {
color: #FFCD0F
}
.igx-query-builder__header {
color: #FFCD0F
}
.igx-filter-tree__expression-actions igx-icon {
color: #FFCD0F
}
.igx-filter-tree__expression-actions igx-icon:hover {
color: #ffe482
}
.igx-filter-tree__expression-actions igx-icon:focus {
color: #ffe482
}
.igx-filter-contextual-menu {
border: 1px solid #FFCD0F
}
.igx-filter-contextual-menu__close-btn {
position: absolute !important;
background: #292826 !important;
border-color: #FFCD0F !important;
}
}
}
}
Defining a color palette
En lugar de codificar los valores de color como acabamos de hacer, podemos lograr una mayor flexibilidad en términos de colores utilizando las funciones igx-palette
e igx-color
.
igx-palette
genera una paleta de colores basada en los colores primarios y secundarios que se pasan:
$yellow-color: #FFCD0F;
$black-color: #292826;
$dark-palette: palette($primary: $yellow-color, $secondary: $black-color);
Y luego con igx-color
podemos recuperar fácilmente el color de la paleta.
$custom-query-builder: query-builder-theme(
$background: color($dark-palette, "secondary", 400)
);
$custom-button: button-theme(
$disabled-color: color($dark-palette, "secondary", 100),
...
);
$custom-button-group: button-group-theme(
$item-background: color($dark-palette, "secondary", 400),
...
);
$custom-input-group: input-group-theme(
$box-background: color($dark-palette, "secondary", 200),
...
);
$custom-chip: chip-theme(
$background: color($dark-palette, "primary", 400),
...
);
$custom-drop-down: drop-down-theme(
$background-color: color($dark-palette, "secondary", 400),
...
);
Note
igx-color
e igx-palette
son funciones potentes para generar y recuperar colores. Consulte el tema Palettes
para obtener orientación detallada sobre cómo utilizarlas.
Using Schemas
Yendo más allá con el motor de temas, puede crear una estructura sólida y flexible que se beneficie de los esquemas. Un esquema es una receta de un tema.
Amplíe uno de los dos esquemas predefinidos, que se proporcionan para cada componente, en este caso: light-query-builder
, light-button
, light-button-group
, light-chip
, light-input-group
y light-drop-down
esquemas:
$query-builder-dark-palette: palette($primary: #11bd7b, $secondary: #e32057, $info: $black-color);
$custom-query-builder-schema: extend($_light-query-builder,
(
background:(
color: ("info")
)
)
);
$custom-button-schema: extend($_light-button,
(
disabled-color:(
color: ("secondary", 100)
),
...
)
);
$custom-button-group-schema: extend($_light-button-group,
(
item-background:(
color: ("secondary", 400)
),
...
)
);
$custom-input-group-schema: extend($_light-input-group,
(
box-background:(
color: ("secondary", 200)
),
...
)
);
$custom-chip-schema: extend($_light-chip,
(
background:(
color: ("primary", 400)
),
...
)
);
$custom-drop-down-schema: extend($_light-drop-down,
(
background-color:(
color: ("secondary", 400)
),
...
)
);
Para aplicar nuestros esquemas personalizados, tenemos que extender uno de los globales (light
u dark
), que básicamente señala los componentes con un esquema personalizado, y luego agregarlo a los respectivos temas de los componentes:
$custom-light-schema: extend($light-schema,(
igx-query-builder: $custom-query-builder-schema,
igx-button: $custom-button-schema,
igx-button-group: $custom-button-group-schema,
igx-input-group: $custom-input-group-schema,
igx-chip: $custom-chip-schema,
igx-drop-down: $custom-drop-down-schema
));
$custom-query-builder: query-builder-theme(
$palette: $query-builder-dark-palette,
$schema: $custom-light-schema
);
$custom-button: button-theme(
$palette: $dark-palette,
$schema: $custom-light-schema
);
$custom-button-group: button-group-theme(
$palette: $dark-palette,
$schema: $custom-light-schema
);
$custom-input-group: input-group-theme(
$palette: $dark-palette,
$schema: $custom-light-schema
);
$custom-chip: chip-theme(
$palette: $dark-palette,
$schema: $custom-light-schema
);
$custom-drop-down: drop-down-theme(
$palette: $dark-palette,
$schema: $custom-light-schema
);
No olvide incluir los temas de la misma manera que se demostró anteriormente.
Demo
Note
La muestra no se verá afectada por el tema global seleccionado en Change Theme
.
También puede optimizar el desarrollo de su aplicación Angular utilizando WYSIWYG App Builder ™ con componentes de interfaz de usuario reales.