Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/typescript/9.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Angular 使用不带MatDialog的组件,MatDialogRef<;SomeComponent>;_Angular_Typescript_Angular Material_Angular Material2 - Fatal编程技术网

Angular 使用不带MatDialog的组件,MatDialogRef<;SomeComponent>;

Angular 使用不带MatDialog的组件,MatDialogRef<;SomeComponent>;,angular,typescript,angular-material,angular-material2,Angular,Typescript,Angular Material,Angular Material2,我有一个函数,它可以打开一个MatDialog,其中有一个名为“NoteFormComponent”的组件,如下所示 openForm() { let dialogConfig = new MatDialogConfig(); dialogConfig.autoFocus = true; dialogConfig.width = "95%"; dialogConfig.panelClass = "form-dialog"; dialogConfig.s

我有一个函数,它可以打开一个MatDialog,其中有一个名为“NoteFormComponent”的组件,如下所示

  openForm() {
    let dialogConfig = new MatDialogConfig();
    dialogConfig.autoFocus = true;
    dialogConfig.width = "95%";
    dialogConfig.panelClass = "form-dialog";
    dialogConfig.scrollStrategy = new NoopScrollStrategy();

    this.dialog.open(NoteFormComponent, dialogConfig).beforeClose().subscribe(() => this.getNotes());
  }
  constructor(
    private noteService : NoteService, 
    private productService : ProductService,
    private categoryService : CategoryService,
    private clientService : ClientService,
    private notification : NotificationService,
    private dialogRef : MatDialogRef<NoteFormComponent>, /*This Reference*/
    private loader : LoaderService,
    private sessionService : SessionService,
    private securityBlockerService : SecurityBlockerService,
    private dialog : MatDialog,
    private dialogService : DialogService
  ) { }
我弹出一个包含“NoteFormComponent”的模式。 那么问题出在哪里?

问题是我想在不使用MatDialog的情况下使用'NoteFormComponent',但是为了在MatDialog中使用它,我必须像这样在组件的构造函数中插入一个引用

  openForm() {
    let dialogConfig = new MatDialogConfig();
    dialogConfig.autoFocus = true;
    dialogConfig.width = "95%";
    dialogConfig.panelClass = "form-dialog";
    dialogConfig.scrollStrategy = new NoopScrollStrategy();

    this.dialog.open(NoteFormComponent, dialogConfig).beforeClose().subscribe(() => this.getNotes());
  }
  constructor(
    private noteService : NoteService, 
    private productService : ProductService,
    private categoryService : CategoryService,
    private clientService : ClientService,
    private notification : NotificationService,
    private dialogRef : MatDialogRef<NoteFormComponent>, /*This Reference*/
    private loader : LoaderService,
    private sessionService : SessionService,
    private securityBlockerService : SecurityBlockerService,
    private dialog : MatDialog,
    private dialogService : DialogService
  ) { }
构造函数(
私人noteService:noteService,
私人产品服务:产品服务,
私有类别服务:类别服务,
私人客户端服务:客户端服务,
私人通知:NotificationService,
私有dialogRef:MatDialogRef,/*此引用*/
私人加载器:加载器服务,
专用会话服务:会话服务,
私有securityBlockerService:securityBlockerService,
私人对话:MatDialog,
专用dialogService:dialogService
) { }
如果我尝试使用带有模板选择器“”的组件,它会抛出一个错误,即没有MatDialogRef的提供程序,我唯一想到的是创建一个“NoteFormComponent”的副本,但构造函数中没有MatDialogRef注入器

在构造函数()中注入MatDialogRef时,是否仍有解决或解决此问题的方法?

使用
@Optional()
装饰程序:

构造函数(
...
@可选()私有dialogRef:MatDialogRef,
...
) { ... }

通过这样做,您可以正常使用
NoteFormComponent
,而无需使用MatDialog。

谢谢!这正是我所需要的。您是否认为angular需要这样的功能:与其使用
@Optional()private dialogRef:
,不如使用
private dialogRef?:
来实现相同的行为?