передача параметра в метод открытия mat-dialog - PullRequest
0 голосов
/ 01 марта 2019

Угловой 7.1 , AngularMaterial 7.3

Я пытаюсь вызвать функцию и передать какое-то значение, она выдает следующее сообщение об ошибке

Не найдена фабрика компонентов для t1.Вы добавили его в @ NgModule.entryComponents?

Хотя t1 включено в entryComponent.но как только удаляете передаваемое значение, чтобы исправить значение, оно будет работать.

  <button mat-button (click)="openDialog('t1')">T1</button>
  <button mat-button (click)="openDialog('t2')">T2</button>

Как только я передам значение, его покажите приведенным выше кодом.

  openDialog(e) {
    console.log(e);
    const dialogRef = this.dialog.open(e);
    dialogRef.afterClosed().subscribe(result => {
      console.log(`Dialog result: ${result}`);
      dialogRef == null
    });
  }

@Component({
  selector: 't1',
  templateUrl: 't1.html',
})
export class t1 {}

@Component({
  selector: 't2',
  templateUrl: 't2.html',
})
export class t2 {}

, но как только я удалю значение и исправлю dialogRef.open отлично работает

const dialogRef = this.dialog.open(t1);

Ответы [ 3 ]

0 голосов
/ 01 марта 2019

Попробуйте что-то вроде этого

constructor(
    public dialogRef: MatDialogRef<Component>,
    private dialog: MatDialog,
  ) { }


  openDialog(t1) {
    const dialogRef = this.dialog.open(NameComponent, {
      data: { t1 }
    });
    dialogRef.afterClosed().subscribe(data => {

  }

при получении в диалоговом компоненте

 @Inject(MAT_DIALOG_DATA) public data: any,

Надеюсь, что это работает

0 голосов
/ 01 марта 2019
openDialog(dialog : string) {
    if(dialog == "t1"){
     const dialogRef = this.dialog.open(t1,{ data: { "YOURVALUE" }});
     dialogRef.afterClosed().subscribe(result => { this.YOURVALUE = result; });
    }
    else {
     const dialogRef = this.dialog.open(t2,{ data: { "YOURVALUE" }});
     dialogRef.afterClosed().subscribe(result => { this.YOURVALUE = result; });
    }
}
0 голосов
/ 01 марта 2019

Вы должны отправить переменную вместо строки.это должно быть t1 вместо 't1'

  <button mat-button (click)="openDialog(t1)">T1</button>
  <button mat-button (click)="openDialog(t2)">T2</button>

В ваших component.ts вы должны объявить компоненты

public t1 = new t1();
public t2 = new t2();

или вы можете попробовать следующий метод, используя template variables

  <t1 #test1></t1>
  <t2 #test2></t2>
  <button mat-button (click)="openDialog(test1)">T1</button>
  <button mat-button (click)="openDialog(test2)">T2</button>
...