Descripción general de los componentes del panel de expansión de Angular
Ignite UI for Angular proporciona a los desarrolladores uno de los componentes de diseño más útiles y fáciles de usar: el Panel de expansión. Este componente rico en funciones se utiliza para crear una vista de resumen detallada expandible o contraíble. El contenido puede incluir Angular animación del panel de expansión, texto, iconos, encabezado, barra de acciones y otros elementos.
Ignite UI panel de expansión igx-expansion-panel es un componente de acordeón de Angular liviano que se puede renderizar en dos estados: colapsado o expandido. El panel de expansión de Angular se puede alternar mediante un clic del mouse o interacciones con el teclado. También puede combinar varios paneles de expansión Angular en Angular acordeón.
Angular Expansion Panel Example
Hemos creado este sencillo ejemplo de panel de expansión de Angular utilizando Ignite UI Angular. Vea cómo funciona el ejemplo.
Getting Started with Ignite UI for Angular Expansion Panel
Para comenzar con el componente Ignite UI for Angular DropDown, 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 al Ignite UI for Angular, lea el tema de introducción.
El siguiente paso es importarlosIgxExpansionPanelModule en tu archivo app.module.ts.
// app.module.ts
...
import { IgxExpansionPanelModule } from 'igniteui-angular/expansion-panel';
// import { IgxExpansionPanelModule } from '@infragistics/igniteui-angular'; for licensed package
@NgModule({
...
imports: [..., IgxExpansionPanelModule],
...
})
export class AppModule {}
Alternativamente,16.0.0 puedes importarlosIgxExpansionPanelComponent como una dependencia independiente, o usar elIGX_EXPANSION_PANEL_DIRECTIVES token para importar el componente y todos sus componentes y directivas de soporte.
// home.component.ts
import { IGX_EXPANSION_PANEL_DIRECTIVES } from 'igniteui-angular/expansion-panel';
// import { IGX_EXPANSION_PANEL_DIRECTIVES } from '@infragistics/igniteui-angular'; for licensed package
@Component({
selector: 'app-home',
template: `
<igx-expansion-panel>
<igx-expansion-panel-header>
<igx-expansion-panel-title>
Golden Retriever
</igx-expansion-panel-title>
<igx-expansion-panel-description>
Medium-large gun dog
</igx-expansion-panel-description>
</igx-expansion-panel-header>
<igx-expansion-panel-body>
The Golden Retriever is a medium-large gun dog that retrieves shot waterfowl,
such as ducks and upland game birds, during hunting and shooting parties.
The name "retriever" refers to the breed's ability to retrieve shot game undamaged due to their soft mouth.
Golden retrievers have an instinctive love of water, and are easy to train to basic or advanced obedience standards.
</igx-expansion-panel-body>
</igx-expansion-panel>
`,
styleUrls: ['home.component.scss'],
standalone: true,
imports: [IGX_EXPANSION_PANEL_DIRECTIVES]
/* or imports: [IgxExpansionPanelComponent, IgxExpansionPanelHeaderComponent, IgxExpansionPanelTitleDirective, IgxExpansionPanelDescriptionDirective, IgxExpansionPanelBodyComponent] */
})
export class HomeComponent {}
Ahora que tienes importado el módulo o directivas del Panel de Expansión Ignite UI for Angular, puedes empezar a usar eligx-expansion-panel componente.
Using the Angular Expansion Panel
En la siguiente tabla se muestran todas las piezas de marcado disponibles para el panel de expansión Angular.
| Nombre de etiqueta | Descripción |
|---|---|
igx-expansion-panel |
El host del componente: almacena el encabezado y el cuerpo. |
igx-expansion-panel-header |
Almacena el encabezado del componente. Esto siempre es visible. Almacena el título y la descripción, así como cualquier contenido adicional. |
igx-expansion-panel-title |
Úselo para configurar el título del panel de expansión. |
igx-expansion-panel-description |
Se puede utilizar para proporcionar un breve resumen. La descripción siempre aparecerá después del título (si el título está configurado). |
igx-expansion-panel-icon |
Úselo para cambiar el ícono predeterminado de expandir/contraer. |
igx-expansion-panel-body |
Este es el contenedor expandible y solo es visible cuando el panel está expandido. |
Properties Binding and Events
Podemos añadir algo de lógica a nuestro componente para que muestre o oculte eligx-expansion-panel-description estado actual del panel.
Podemos hacer esto vinculando la descripción a la propiedad de controlcollapsed:
// in expansion-panel.component.ts
import { IgxExpansionPanelComponent } from 'igniteui-angular/expansion-panel';
// import { IgxExpansionPanelComponent } from '@infragistics/igniteui-angular'; for licensed package
@Component({...})
export class ExpansionPanelComponent {
@ViewChild(IgxExpansionPanelComponent, {read: IgxExpansionPanelComponent})
public panel: IgxExpansionPanelComponent;
}
<!-- in expansion-component.component.html -->
<igx-expansion-panel>
<igx-expansion-panel-header>
Golden Retriever
<igx-expansion-panel-description *ngIf="panel.collapsed">
Medium-large gun dog
</igx-expansion-panel-description>
</igx-expansion-panel-header>
...
</igx-expansion-panel>
El siguiente ejemplo de código mostrará la breve descripción solo cuando el componente esté contraído. Si queremos agregar una funcionalidad más compleja según el estado del componente, también podemos vincularnos a un emisor de eventos.
// in expansion-panel.component.ts
@Component({...})
export class ExpansionPanelComponent {
...
public handleExpansion(args: {event: Event}): void {
... // Some functionality
}
}
<!-- in expansion-component.component.html -->
<igx-expansion-panel (onExpanded)="handleExpansion($event)" (contentCollapsed)="handleCollapse($event)"></igx-expansion-panel>
A continuación tenemos los resultados:
Component Customization
EstoIgxExpansionPanelComponent permite una personalización sencilla del encabezado. La configuración de la posición del icono de cabecera puede hacerse mediante laiconPosition entrada en eligx-expansion-panel-header. Las opciones posibles para la posición del icono son izquierda, derecha y ninguna. El siguiente ejemplo de código muestra cómo configurar el botón del componente para que vaya al lado derecho.
<!-- in expansion-component.component.html -->
<igx-expansion-panel>
<igx-expansion-panel-header [iconPosition]="'right'"></igx-expansion-panel-header>
...
</igx-expansion-panel>
Note
LaiconPosition propiedad funciona conRTL ella: por ejemplo, un icono configurado para aparecer en la derecha aparecerá en la parte más a la izquierda del encabezado cuando RTL está activado.
El icono por defecto para el estado de alternancia del control puede ser una plantilla. Podemos hacerlo pasando contenido en unaigx-expansion-panel-icon etiqueta:
<!-- in expansion-component.component.html -->
<igx-expansion-panel>
<igx-expansion-panel-header [iconPosition]="'right'">
...
<igx-expansion-panel-icon>
<span class="example-icon" *ngIf="panel.collapsed">Show More</span>
<span class="example-icon" *ngIf="!panel.collapsed">Show Less</span>
</igx-expansion-panel-icon>
</igx-expansion-panel-header>
...
</igx-expansion-panel>
Nuestro Angular Panel de Expansión ahora renderizará "Mostrar Más" cuando el panel esté colapsado y "Mostrar Menos" una vez que esté completamente expandido.
ElIgxExpansionPanel control permite añadir todo tipo de contenido dentro de laigx-expansion-panel-body. ¡Puede renderizarIgxGridIgxCombo gráficos, gráficos e incluso otros paneles de expansión!
En aras de la simplicidad, agreguemos algunas marcas básicas al cuerpo de nuestro panel de expansión.
<!-- in expansion-panel.component.html -->
...
<igx-expansion-panel-body>
<div class="example-content">
<img [src]="imgSource" alt="dog-image">
The Golden Retriever is a medium-large gun dog that retrieves shot waterfowl, such as ducks and upland game birds, during hunting and shooting parties. The name "retriever" refers to the breed's ability to retrieve shot game undamaged due to their soft mouth. Golden retrievers have an instinctive love of water, and are easy to train to basic or advanced obedience standards.
<a igxButton="outlined" target="_blank" [href]="readMore">Read more</a>
</div>
</igx-expansion-panel-body>
...
Veamos el resultado de todos los cambios anteriores:
Estilismo
Expansion Panel Theme Property Map
Cambiar las$header-background propiedades y$body-background actualiza automáticamente las siguientes propiedades dependientes:
| Propiedad principal | Propiedad dependiente | Descripción |
|---|---|---|
$header-antecedentes |
$header-título-color | El color del texto del título del encabezado del panel. |
| $header-icono-color | El color del icono de cabecera del panel. | |
| $header-descripción-color | El encabezado del panel, descripción del color. | |
| $header-enfoque-fondo | El encabezado del panel enfoca el color de fondo. | |
| $disabled-text-color | El panel desactivó el color del texto. | |
| $disabled-descripción-color | El panel desactivó el color del texto de descripción de cabecera. | |
| $body antecedentes | $body-color | El color del texto del cuerpo del panel. |
Palettes & Colors
Primero creamos una paleta personalizada que luego puede pasarse a nuestro componente:
// In real life, this should be in our main sass file so we can share the palette between all components.
// In our case, it's in the component SCSS file "expansion-styling.component.scss".
@use "igniteui-angular/theming" as *;
// IMPORTANT: Prior to Ignite UI for Angular version 13 use:
// @import '~igniteui-angular/lib/core/styles/themes/index';
// Add your brand colors.
$my-primary-color:#353a4b;
$my-secondary-color: #ffd351;
$my-surface-color: #efefef;
// Create custom palette.
$my-color-palette: palette(
$primary: $my-primary-color,
$secondary: $my-secondary-color,
$surface: $my-surface-color
);
Creating the Component Theme
Ahora creemos nuestro tema componente y pasemos la$my-color-palette paleta del sniped anterior.
// In expansion-styling.component.scss
// Create expansion panel theme.
$custom-panel-theme: expansion-panel-theme(
// Styling parameters.
$header-background: color($my-color-palette, "primary", 700),
$header-focus-background: color($my-color-palette, "primary", 700),
$header-title-color: color($my-color-palette, "secondary"),
$header-icon-color: color($my-color-palette, "secondary"),
$body-background: color($my-color-palette, "primary", 700),
$body-color: color($my-color-palette, "secondary", 100),
$border-radius: .5
);
Si preferimos, en lugar de crear una paleta, podemos asignar los colores directamente a la función de expansión panel-tema como argumentos. Si no se proporcionan explícitamente lastitle-coloricon-color propiedades del primer plano u otras propiedades del primer plano, se asignarán automáticamente a negro o blanco, lo que ofrezca mejor contraste con el fondo.
$custom-panel-theme: expansion-panel-theme(
$header-background: #353a4b,
$header-focus-background: #353a4b,
$header-title-color: #ffd351,
$header-icon-color: #ffd351,
...
);
Note
Para ver todos los parámetros disponibles para el diseño a través deltheming motor, revisa elAPI documentation
Applying the Component Theme
Ahora, para aplicar el tema componente, solo queda incluircss-vars mixin y pasar el$custom-panel-theme mapa.
// In expansion-styling.component.scss
@include css-vars($custom-panel-theme);
Para saber más sobre cómo usar Ignite UI motor de tematizaciónclick here
Demo
Styling with Tailwind
Puedes diseñar el panel de expansión usando nuestras clases utilitarias personalizadas de Tailwind. Asegúrate de configurar primero a Tailwind.
Junto con la importación de viento de cola en su hoja de estilo global, puede aplicar las utilidades de tema deseadas de la siguiente manera:
@import "tailwindcss";
...
@use 'igniteui-theming/tailwind/utilities/material.css';
El archivo de utilidad incluye variantes tantolight comodark de tema.
- Usa
light-*clases para el tema ligero. - Usa
dark-*clases para el tema oscuro. - Añadir el nombre del componente después del prefijo, por ejemplo, ,
light-expansion-panel,dark-expansion-panel.
Una vez aplicadas, estas clases permiten cálculos dinámicos de temas. Desde ahí, puedes anular las variables CSS generadas usandoarbitrary properties. Después de los dos puntos, proporciona cualquier formato de color CSS válido (HEX, variable CSS, RGB, etc.).
Puedes encontrar la lista completa de propiedades en el tema del panel de expansión. La sintaxis es la siguiente:
<igx-expansion-panel
class="!light-expansion-panel
![--header-background:#4F6A5A]
![--body-background:#A3C7B2]"
>
...
</igx-expansion-panel>
Note
El signo de exclamación(!) es necesario para asegurar que la clase de utilidad tenga prioridad. Tailwind aplica estilos en capas y, sin marcar estos estilos como importantes, serán anulados por el tema predeterminado del componente.
Al final, tu panel de expansión debería verse así:
Angular Expansion Panel Animations
Using specific animation
Es posible usar animación distinta a la predeterminada al expandir y colapsar el componente. Suponiendo que igxExpansionPanel ya está importado comoapp.module.ts se describió antes, puedes crear un objeto personalizado de configuración de animación y configurarlo para usarlo en el Panel de Expansión Ignite UI for Angular. El enfoque requiere eluseAnimation método y las animaciones específicas que se van a usar, así que empezamos a importarlas y a definir los ajustes de animación como:
// in expansion-panel.component.ts
import { useAnimation } from '@angular/animations';
import { IgxExpansionPanelComponent } from 'igniteui-angular/expansion-panel';
import { slideInLeft, slideOutRight } from 'igniteui-angular/animations';
// import { IgxExpansionPanelComponent, slideInLeft, slideOutRight } from '@infragistics/igniteui-angular'; for licensed package
@Component({...})
export class ExpansionPanelComponent {
@ViewChild(IgxExpansionPanelComponent, {read: IgxExpansionPanelComponent})
public panel: IgxExpansionPanelComponent;
public animationSettingsCustom = {
closeAnimation: useAnimation(slideOutRight, {
params: {
duration: '100ms',
toPosition: 'translateX(25px)'
}
}),
openAnimation: useAnimation(slideInLeft, {
params: {
duration: '500ms',
fromPosition: 'translateX(-15px)',
startOpacity: 0.1
}
})
};
public collapsed() {
return this.panel && this.panel.collapsed;
}
}
Como puedes ver, vamos a usarslideInLeft animacionesslideOutRight de nuestro conjunto integrado de animaciones para que el contenido componente se vea más dramáticamente desde el lado izquierdo y desaparezca por el derecho al colapsar el contenido. En el proceso, anulamos algunos de los parámetros existentes con los específicos que queremos usar.
El ejemplo muestra información del usuario y el punto clave aquí es pasar los ajustes de animación al componente como:[animationSettings] = "animationSettingsCustom"
<!-- in expansion-panel.component.html -->
...
<igx-expansion-panel [animationSettings] = "animationSettingsCustom" class="my-expansion-panel">
<igx-expansion-panel-header>
<igx-expansion-panel-title class="sample-title">Angular</igx-expansion-panel-title>
</igx-expansion-panel-header>
<igx-expansion-panel-body>
Angular (commonly referred to as "Angular 2+" or "Angular v2 and above") is a TypeScript-based open-source web application framework led by the Angular Team at Google and by a community of individuals and corporations.
</igx-expansion-panel-body>
</igx-expansion-panel>
...
Puedes ver los resultados a continuación:
Multiple panel scenario
Ver el tema igxAccordion
API Reference
- API IgxExpansionPanel
- API IgxExpansionPanelHeader
- API IgxExpansionPanelBody
- Estilos de panel IgxExpansion