Can';t解析MatDialogRef angular 4的所有参数

Can';t解析MatDialogRef angular 4的所有参数,angular,angular-material,Angular,Angular Material,我正在处理Angular 4,我正在尝试设置材质包,在这里我正在尝试对话框,但它不起作用,可能是因为材质包我不确定 这是我的(dialog.components.ts): 我得到了这个错误: 有什么想法吗 编辑 我的呼叫功能: openPopup(){ const config = new MatDialogConfig(); const dialogRef: MatDialogRef<DialogComponent> = this.dialog.o

我正在处理Angular 4,我正在尝试设置材质包,在这里我正在尝试对话框,但它不起作用,可能是因为材质包我不确定

这是我的(dialog.components.ts):

我得到了这个错误:

有什么想法吗

编辑

我的呼叫功能:

openPopup(){
        const config = new MatDialogConfig();
        const dialogRef: MatDialogRef<DialogComponent> = this.dialog.open(DialogComponent, config);

        dialogRef.componentInstance.receivedNode = "test";
        console.log("test");
    }
openPopup(){
const config=new MatDialogConfig();
const dialogRef:MatDialogRef=this.dialog.open(DialogComponent,config);
dialogRef.componentInstance.receivedNode=“测试”;
控制台日志(“测试”);
}

从提供者列表中删除
MatDialogRef


这不是提供程序,这是对对象的引用(以
Ref
结尾)

希望这有帮助这就是我所做的:

在组件上:

import { MatDialog } from '@angular/material';
import { DialogComponent } from './dialogs'; // component name of dialog can add multiple in here.

@Component({
    selector: 'yourComponent',
    templateUrl: './yourComponent.html'
})
export class YourComponent {

  private dialogRef: any;
  constructor(public dialog: MatDialog) {

  openPopup(){
    this.dialogRef = this.dialog.open(DialogComponent , {
                                    width: '250px',
                                    height: '25%',
                                    data: { errorcode: errorCode, errormessage: errorMessage }
                                });
                                this.dialogRef.updatePosition({ top: '3%', left: '20%' });
  }
在模块中:

import { DialogComponent } from './dialogs'; // component name of dialog
import { NgModule, CUSTOM_ELEMENTS_SCHEMA, NO_ERRORS_SCHEMA } from '@angular/core';
import { BrowserModule } from '@angular/platform-browser';
import { MatDialogModule } from '@angular/material';

@NgModule({
    declarations: [
        DialogComponent 
    ],
    imports: [
        BrowserModule,
        MatDialogModule
    ],
    entryComponents: [
        DialogComponent 
    ],
    schemas: [CUSTOM_ELEMENTS_SCHEMA, NO_ERRORS_SCHEMA]
})
最后,对话框:

从'@angular/core'导入{Component,OnInit};
从“@angular/material”导入{MatDialogRef,MAT_DIALOG_DATA};
@组成部分({
选择器:“应用程序对话框”,
templateUrl:'./dialog.component.html',
样式URL:['./dialog.component.css']
})
导出类DialogComponent实现OnInit{
构造函数(公共dialogRef:MatDialogRef,
@Inject(MAT_DIALOG_DATA)私有数据:any){}//this.DATA.errormessage包含错误消息。不确定是否需要OnInit。
恩戈尼尼特(){
}//我没有使用这个。相反,我将数据放在HTML中,然后单击按钮与组件交互。
}

您只需将其添加到提供程序中。对于我来说,下面的代码有效。如果您使用了MAT_DIALOG_数据,则还需要添加此数据

providers: [
{ 
provide: MatDialogRef,
useValue: []
 }, 
{ 
provide: MAT_DIALOG_DATA, 
useValue: [] 
}
]

我对Angular 9有同样的错误(无法解析MatDialogRef:(?,?)的所有参数),尤其是在使用Angular Material模块执行测试时

这是我在beforeach()部分中的解决方案:

之前

之后


请共享创建对话框的代码。类似于
this.dialogRef=this.dialog.open(DialogComponent,{width:'150px',height:'100%})如果没有此plz read@Swoox,请检查我的编辑,因为您的配置为空,请尝试:
const dialogRef:MatDialogRef=this.dialog.open(DialogComponent)
您的DialogComponent也需要添加到您的模块声明中。@s如果出现相同的错误,我试图对openPopup()函数进行注释,以确保错误与它无关。我是stuck@Swoox:传递到
open()
配置中保存了什么?
open()
函数需要一个回调和一个对象
data
,您可以在其中传递数据。如下所示:
const dialogRef=this.dialog.open(DialogComponent,{width:'300px',height:'450px',data:{content:'Your data or text Your want pass'})
在您错过的构造函数中:
公共对话框:MatDialog
应该是:
公共对话框:MatDialog,公共thisDialogRef:MatDialogRef
import { DialogComponent } from './dialogs'; // component name of dialog
import { NgModule, CUSTOM_ELEMENTS_SCHEMA, NO_ERRORS_SCHEMA } from '@angular/core';
import { BrowserModule } from '@angular/platform-browser';
import { MatDialogModule } from '@angular/material';

@NgModule({
    declarations: [
        DialogComponent 
    ],
    imports: [
        BrowserModule,
        MatDialogModule
    ],
    entryComponents: [
        DialogComponent 
    ],
    schemas: [CUSTOM_ELEMENTS_SCHEMA, NO_ERRORS_SCHEMA]
})
import {Component, OnInit} from '@angular/core';
import { MatDialogRef, MAT_DIALOG_DATA } from '@angular/material';

@Component({
    selector: 'app-dialog',
    templateUrl: './dialog.component.html',
    styleUrls: ['./dialog.component.css']
})
export class DialogComponent implements OnInit {

    constructor(public dialogRef: MatDialogRef<DialogComponent>, 
                @Inject(MAT_DIALOG_DATA) private data: any) { } // this.data.errormessage contain error message. Not sure if need OnInit.

    ngOnInit() {
    } // I have not used this. Instead, I have put the data in HTML and click on buttons from there to interact with the component.

}
providers: [
{ 
provide: MatDialogRef,
useValue: []
 }, 
{ 
provide: MAT_DIALOG_DATA, 
useValue: [] 
}
]
import { MatDialogRef, MAT_DIALOG_DATA } from '@angular/material/dialog';

beforeEach(async(() => {
            TestBed.configureTestingModule({
                        ...
                        ...
                    providers: [
                        { provide: MatDialogRef },
                        { provide: MAT_DIALOG_DATA }
                    ]
            }).compileComponents();

    })); 
import { MAT_DIALOG_DEFAULT_OPTIONS } from '@angular/material/dialog';

beforeEach(async(() => {
            TestBed.configureTestingModule({
                    ...
                    ...
                    providers: [{
                        provide: MAT_DIALOG_DEFAULT_OPTIONS, useValue: {hasBackdrop: false}
                    }]
            }).compileComponents();