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