Empresas
Empleos
  • Sobre nosotros
  • Soluciones
    • Publicación de vacantes
      Publica tu vacante y recibe candidatos calificados en 48h.
    • Evaluación de candidatos
      500+ pruebas técnicas y psicológicas, más anti-fraude.
    • Headhunting
      Búsqueda ejecutiva a la medida de principio a fin.
    • Nómina + EOR
      Dispersión de nómina y EOR en más de 15 países de LATAM.
  • Precios
  • Empleos

0

968
Vistas
Cómo pasar datos al diálogo de material angular 2

Estoy usando el cuadro de diálogo de material angular2.

Quiero pasar datos al componente abierto. Así es como estoy abriendo el cuadro de diálogo al hacer clic en un botón

 let dialogRef = this.dialog.open(DialogComponent, { disableClose: true, data :{'name':'Sunil'} });

En la página de documentación hay una propiedad de datos, pero verifiqué MdDialogConfig en mis paquetes instalados

 /** * Configuration for opening a modal dialog with the MdDialog service. */ export declare class MdDialogConfig { viewContainerRef?: ViewContainerRef; /** The ARIA role of the dialog element. */ role?: DialogRole; /** Whether the user can use escape or clicking outside to close a modal. */ disableClose?: boolean; /** Width of the dialog. */ width?: string; /** Height of the dialog. */ height?: string; /** Position overrides. */ position?: DialogPosition; }

no hay ninguna propiedad de datos en la clase de configuración.

Ahora, ¿cómo puedo acceder a los datos pasados?

over 4 years ago · Santiago Trujillo
3 Respuestas
Responde la pregunta

0

Para la versión más reciente de diálogo ( esto es anterior a Angular 5, para 5 vea la actualización a continuación) , puede hacer lo siguiente para pasar datos a través de la configuración, que es mucho más simple y limpio.

Cuando abre el cuadro de diálogo, puede hacerlo de esta manera agregando datos como un parámetro de configuración (simplemente ignore el ancho y la altura que están allí con fines ilustrativos):

 this.dialogRef = this.dialog.open(someComponent, { width: '330px', height: '400px', data: { dataKey: yourData } });

Luego, en el componente que se abre en el cuadro de diálogo, puede acceder a él como:

 import {MD_DIALOG_DATA} from '@angular/material'; import { Inject } from '@angular/core'; constructor( @Inject(MD_DIALOG_DATA) public data: any ) { } ngOnInit() { // will log the entire data object console.log(this.data) }

O puede usar el acceso en la plantilla u otros métodos, pero entiende el punto.

ACTUALIZACIÓN para Angular 5

Todo en el material se ha cambiado de Md a Mat, por lo que si está en Angular 5, importe como:

 import {MAT_DIALOG_DATA} from '@angular/material'

Luego inyectar como

 @Inject(MAT_DIALOG_DATA) public data: any

ACTUALIZACIÓN para Angular 9

La ubicación de importación de MAT_DIALOG_DATA ha cambiado a:

 import {MAT_DIALOG_DATA} from '@angular/material/dialog';
over 4 years ago · Santiago Trujillo Denunciar

0

ACTUALIZACIÓN 2 (Angular 5+)

Esta respuesta está bastante desactualizada. Eche un vistazo a la respuesta de epiphanatic en su lugar .

ACTUALIZAR

Puede usar dialogRef.componentInstance.myProperty = 'some data' para establecer los datos en su componente.

Necesitarías algo como esto:

 let dialogRef = this.dialog.open(DialogComponent, { disableClose: true, }); dialogRef.componentInstance.name = 'Sunil';

Luego, en su DialogComponent necesita agregar su name property :

 ... @Component({ ... }) export class DialogComponent { public name: string; ... }

El texto a continuación no es válido en versiones más recientes de @angular/material

No encontré ninguna documentación sobre esto, así que también comencé a buscar en el código fuente. Por eso, esta podría no ser la forma oficial de hacerlo.

Localicé con éxito los datos en dialogRef._containerInstance.dialogConfig.data ;

Así que lo que puedes hacer es por ejemplo

 let name = dialogRef._containerInstance.dialogConfig.data.name; console.log(name); // Sunil

over 4 years ago · Santiago Trujillo Denunciar

0

Pensé en dar una respuesta más completa para aquellos de nosotros que todavía estamos aprendiendo:

A diferencia de los ejemplos de materiales, configuré el cuadro de diálogo para que tuviera sus propios archivos de componentes (html, css y ts) para facilitar la depuración.

Archivo de componente principal "x.component.ts" (llamando al cuadro de diálogo)

1) agregar la declaración de importación

 import { MatDialog} from '@angular/material';

2) agregue la propiedad a los parámetros del constructor

 public dialog: MatDialog

3) definir el código para llamar al cuadro de diálogo

 openDialog(title: string, text: string): void { const dialogRef = this.dialog.open(DialogComponent, { width: '350px', data: {dialogTitle: title, dialogText: text} ); dialogRef.afterClosed().subscribe(result => { }); const dialogSubmitSubscription = dialogRef.componentInstance.submitClicked.subscribe(result => { dialogSubmitSubscription.unsubscribe(); });

}

Llame a la función desde su archivo html con openDialog(). Estoy haciendo referencia a DialogComponent, así que asegúrese de que esté importado en su módulo.

 import { DialogComponent } from './dialog/dialog.component';

además

 entryComponents: [DialogComponent]

declararlo en su matriz de componentes de entrada

4) en su archivo dialog.component.ts, agregue las importaciones

 import { Component, Output, EventEmitter, Inject, OnInit} from '@angular/core'; import { MatDialogRef, MAT_DIALOG_DATA } from '@angular/material';

5) definir las propiedades y funciones

 dialogTitle: string; dialogText: string; @Output() submitClicked = new EventEmitter<any>(); constructor( public dialogRef: MatDialogRef<DialogComponent>, @Inject(MAT_DIALOG_DATA) public data: DialogData) {} ngOnInit() { this.dialogTitle = this.data.dialogTitle; this.dialogText = this.data.dialogText; } saveMessage() { const data = 'Your data'; this.submitClicked.emit(data); this.dialogRef.close(); } closeDialog() { this.dialogRef.close(); }

6) y por último el HTML

 <h1 mat-dialog-title>{{dialogTitle}}"</h1> <div mat-dialog-content> <p>{{dialogText}}</p> </div> <div mat-dialog-actions> <button mat-button (click)="saveMessage()" >Ok</button> <button mat-button (click)="closeDialog()" cdkFocusInitial>No Thanks</button> </div>

Espero que ayude.

over 4 years ago · Santiago Trujillo Denunciar
Responde la pregunta
Encuentra empleos remotos

¡Descubre la nueva forma de encontrar empleo!

Top de empleos
Top categorías de empleo
Empresas
Publicar vacante Precios Comercial
Legal
Términos y condiciones Política de privacidad
© 2026 PeakU Inc. All Rights Reserved.
Andres GPT
Recomiéndame algunas ofertas
Necesito ayuda