Descripción general del componente de la ventana de diálogo Angular

    Utilice el componente Ignite UI for Angular para mostrar mensajes o presentar formularios para que los usuarios los completen. El componente abre una ventana de diálogo centrada en la parte superior del contenido de la aplicación. También puede proporcionar un mensaje de alerta estándar que los usuarios pueden cancelar.

    Angular Dialog Window Example

    Getting Started with Ignite UI for Angular Dialog Window

    Para comenzar con el componente Ignite UI for Angular Dialog Window, 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 IgxDialogModule en su archivo app.module.ts.

    // app.module.ts
    
    ...
    import { IgxDialogModule } from 'igniteui-angular';
    // import { IgxDialogModule } from '@infragistics/igniteui-angular'; for licensed package
    
    @NgModule({
        ...
        imports: [..., IgxDialogModule],
        ...
    })
    export class AppModule {}
    

    Alternativamente, a partir de 16.0.0, puede importar IgxDialogComponent como una dependencia independiente o usar el token IGX_DIALOG_DIRECTIVES para importar el componente y todos sus componentes y directivas de soporte.

    // home.component.ts
    
    import { IGX_DIALOG_DIRECTIVES, IgxButtonDirective, IgxRippleDirective } from 'igniteui-angular';
    // import { IGX_DIALOG_DIRECTIVES, IgxButtonDirective, IgxRippleDirective } from '@infragistics/igniteui-angular'; for licensed package
    
    @Component({
        selector: 'app-home',
        template: `
        <button igxButton="contained" igxRipple="white" (click)="alert.open()">Show Alert Dialog</button>
    
        <igx-dialog #alert
            title="Notification"
            message="Your email has been sent successfully!"
            leftButtonLabel="OK"
            (leftButtonSelect)="alert.close()">
        </igx-dialog>
        `,
        styleUrls: ['home.component.scss'],
        standalone: true,
        imports: [IGX_DIALOG_DIRECTIVES, IgxButtonDirective, IgxRippleDirective]
        /* or imports: [IgxDialogComponent, IgxButtonDirective, IgxRippleDirective] */
    })
    export class HomeComponent {}
    

    Ahora que ha importado el módulo o las directivas Ignite UI for Angular Dialog Window, puede comenzar a usar el componente igx-dialog.

    Using the Angular Dialog Window

    Alert Dialog

    Para crear un cuadro de diálogo de alerta, en la plantilla de nuestro componente de correo electrónico, agregamos el siguiente código. Tenemos que configurar el title, message, leftButtonLabel y manejar el evento leftButtonSelect:

    <!--email.component.html-->
    <button igxButton="contained" igxRipple="white" (click)="alert.open()">Show Alert Dialog</button>
    
    <igx-dialog #alert
        title="Notification"
        message="Your email has been sent successfully!"
        leftButtonLabel="OK"
        (leftButtonSelect)="alert.close()">
    </igx-dialog>
    

    Si todo se hace correctamente, debería ver la muestra de demostración que se muestra arriba en su navegador.

    Standard Dialog

    Para crear un cuadro de diálogo estándar, en la plantilla de nuestro componente de administrador de archivos, agregamos el siguiente código. Tenemos que configurar el title, message, leftButtonLabel, rightButtonLabel y manejar los eventos leftButtonSelect y rightButtonSelect:

    <!--file-manager.component.html-->
    <button igxButton="contained" igxRipple="white" (click)="dialog.open()">Show Confirmation Dialog</button>
    
    <igx-dialog #dialog title="Confirmation"
        leftButtonLabel="Cancel"
        (leftButtonSelect)="dialog.close()"
        rightButtonLabel="OK"
        (rightButtonSelect)="onDialogOKSelected($event)"
        message="Are you sure you want to delete the Microsoft_Annual_Report_2015.pdf and Microsoft_Annual_Report_2015.pdf files?">
    </igx-dialog>
    

    Custom Dialog

    Para crear un cuadro de diálogo personalizado, en la plantilla de nuestro componente de inicio de sesión, agregamos el siguiente código. El área del título del diálogo se puede personalizar usando la directiva igxDialogTitle o el selector igx-dialog-title. El área de acciones se puede personalizar utilizando la directiva igxDialogActions o el selector igx-dialog-actions. Agregamos dos grupos de entrada que constan de una etiqueta y una entrada decorada con las directivas igxLabel e igxInput.

    <!--sign-in.component.html-->
    <button igxButton="contained" igxRipple="white" (click)="alert.open()">Show Custom Dialog</button>
    
    <igx-dialog #form [closeOnOutsideSelect]="true">
        <igx-dialog-title>
            <div class="dialog-container">
                <igx-icon>vpn_key</igx-icon>
                <div class="dialog-title">Sign In</div>
            </div>
        </igx-dialog-title>
    
        <form class="signInForm">
            <igx-input-group>
                <igx-prefix>
                    <igx-icon>person</igx-icon>
                </igx-prefix>
                <label igxLabel for="username">Username</label>
                <input igxInput id="username" type="text"/>
            </igx-input-group>
            <igx-input-group>
                <igx-prefix>
                    <igx-icon>lock</igx-icon>
                </igx-prefix>
                <label igxLabel>Password</label>
                <input igxInput id="password" type="password"/>
            </igx-input-group>
        </form>
    
        <div igxDialogActions>
            <button igxButton (click)="form.close()">CANCEL</button>
            <button igxButton (click)="form.close()">SIGN IN</button>
        </div>
    </igx-dialog>
    

    Position and Animation Settings

    Hay dos formas de cambiar la posición en la que se mostrará el igx-dialog:

    import { PositionSettings, OverlaySettings, GlobalPositionStrategy, NoOpScrollStrategy, HorizontalAlignment, VerticalAlignment } from 'igniteui-angular';
    // import { PositionSettings, OverlaySettings, GlobalPositionStrategy, NoOpScrollStrategy, HorizontalAlignment, VerticalAlignment } from '@infragistics/igniteui-angular'; for licensed package
    
    @Component({...})
    export class HomeComponent {
        public positionSettingsOnOpen: PositionSettings = {
            horizontalDirection: HorizontalAlignment.Right,
            verticalDirection: VerticalAlignment.Middle,
            horizontalStartPoint: HorizontalAlignment.Right,
            verticalStartPoint: VerticalAlignment.Middle,
        };
        public overlaySettings: OverlaySettings = {
            positionStrategy: new GlobalPositionStrategy(this.positionSettingsOnOpen),
            scrollStrategy: new NoOpScrollStrategy(),
            modal: false,
            closeOnOutsideClick: true
        };
    
        public openDialog() {
            this.alert.open(this.overlaySettings);
        }
    }
    
    • Usando positionSettings @Input. Ejemplo:
    <igx-dialog #alert title="Notification" [positionSettings]="positionSettings" >
    </igx-dialog>
    
    import { useAnimation } from '@angular/animations';
    import { PositionSettings, HorizontalAlignment, VerticalAlignment } from 'igniteui-angular';
    // import { PositionSettings, HorizontalAlignment, VerticalAlignment } from '@infragistics/igniteui-angular'; for licensed package
    
    @Component({...})
    export class HomeComponent {
        public positionSettings: PositionSettings = {
            openAnimation: useAnimation(slideInTop, { params: { duration: '2000ms' } }),
            closeAnimation: useAnimation(slideOutBottom, { params: { duration: '2000ms'} }),
            horizontalDirection: HorizontalAlignment.Left,
            verticalDirection: VerticalAlignment.Middle,
            horizontalStartPoint: HorizontalAlignment.Left,
            verticalStartPoint: VerticalAlignment.Middle,
            minSize: { height: 100, width: 100 }
        };
    }
    
    Note

    Se debe usar el mismo enfoque para la configuración de la animación, use las propiedades openAnimation y closeAnimation para definir parámetros de animación como la duración. Ejemplo de objeto params:

    params: {
        delay: '0s',
        duration: '350ms',
        easing: EaseOut.quad,
        endOpacity: 1,
        fromPosition: 'translateX(-500px)',
        startOpacity: 0,
        toPosition: 'translateY(0)'
    }
    

    Trap focus inside dialog

    De forma predeterminada, cuando se abre el cuadro de diálogo, el foco de la tecla Tab queda atrapado dentro de él, es decir, el foco no abandona el elemento cuando el usuario sigue tabulando a través de los elementos enfocables. Cuando el foco sale del último elemento se pasa al primero y viceversa, cuando se presiona SHIFT + TAB, cuando el foco sale del primer elemento se debe enfocar el último elemento. En caso de que el diálogo no contenga ningún elemento enfocable, el foco quedará atrapado en el propio contenedor del diálogo. Este comportamiento se puede cambiar configurando la propiedad focusTrap.

    Estilismo

    Para comenzar a diseñar la ventana de diálogo, 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';
    

    Siguiendo el enfoque más simple, creamos un nuevo tema que extiende el dialog-theme y acepta parámetros que le dan estilo al diálogo.

    $my-dialog-theme: dialog-theme(
        $background: #011627,
        $title-color: #ECAA53,
        $message-color: #FEFEFE,
        $border-radius: .3,
    );
    
    Note

    Para aplicar estilo a cualquier componente adicional que se utilice como parte del contenido de la ventana de diálogo (como IgxButton), se debe crear un tema adicional que sea específico para el componente respectivo y que se coloque solo bajo el alcance de la ventana de diálogo (por lo que no no afecta al resto de la aplicación).

    Dado que la ventana de diálogo utiliza IgxOverlayService, para que nuestro tema personalizado llegue a la ventana de diálogo que queremos diseñar, proporcionaremos una salida específica donde la ventana de diálogo se colocará en el DOM cuando esté visible.

    <div igxOverlayOutlet>
        <igx-dialog #dialog1>
            <!-- .... -->
        </igx-dialog>
    </div>
    
    Note

    Para obtener más información sobre las diversas opciones para proporcionar temas a los elementos que se muestran mediante IgxOverlayService, puede consultar el tema Estilo de superposición.

    Including Themes

    El último paso es incluir el tema del componente en nuestra aplicación.

    Si $legacy-support está configurado en true, incluya el tema así:

     @include dialog($my-dialog-theme);
    
    Note

    Si el componente utiliza una ViewEncapsulation Emulated, es necesario penetrate esta encapsulación usando::ng-deep

    :host {
         ::ng-deep {
            @include dialog($my-dialog-theme);
        }
    }
    

    Si $legacy-support está configurado en false (predeterminado), incluya las variables CSS del componente así:

    @include css-vars($my-dialog-theme);
    
    Note

    Si el componente utiliza una ViewEncapsulation Emulated, aún debe usar:host porque necesita un selector global para anular las variables.

    :host {
        @include css-vars($my-dialog-theme);
    }
    

    Demo

    API Summary

    Theming Dependencies

    Additional Resources

    Nuestra comunidad es activa y siempre da la bienvenida a nuevas ideas.