Empresas
Empregos
  • Sobre nós
  • Soluções
    • Publicação de vagas
      Publique sua vaga e receba candidatos qualificados em 48h.
    • Avaliações de candidatos
      Mais de 500 testes técnicos e psicológicos, mais anti-fraude.
    • Headhunting
      Busca executiva personalizada do início ao fim.
    • Folha de Pagamento + EOR
      Dispersão de folha e EOR em mais de 15 países da LATAM.
  • Preços
  • Empregos

0

970
Visualizações
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 Respostas
Responde à pergunta

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 Relatório

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 Relatório

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 Relatório
Responde à pergunta
Encontrar trabalhos remotos

Descubra a nova forma de encontrar um emprego!

melhores empregos
Principais categorias de trabalho
Empresas
Postar vaga Preços Comercial
Jurídico
Termos e Condições Política de privacidade
© 2026 PeakU Inc. All Rights Reserved.
Andres GPT
Recomende algumas ofertas para mim
Preciso de ajuda