Angular Material : 'mat-dialog-content' is not a known element

标签 angular typescript angular-material angular-components

在将此问题标记为“重复”之前,请倾听我的声音,因为我在这个问题上呆了几个小时。我已经解决了现有的问题,但是找不到任何解决方案。

我正在学习Angular,并从Angular 9+和Angular Material开始。我正在尝试通过阅读official page的文档来实现一个简单的Angular Material对话框。

我的代码紧跟示例代码,但是我仍然茫然为什么仍然收到以下错误消息:

'mat-dialog-content' is not a known element.
'mat-dialog-actions' is not a known element.

对话框确实出现,但看起来对话框模板html中根本没有渲染Angular Material组件/指令。即使使用<button mat-button>Button</button>,它也将呈现为普通按钮而不是Angular Material按钮。对话框模板中未包含的所有其他内容都可以正常工作。我不知道我在这里做错了什么,但是如果有人可以指出我的错误,那就太好了!
app.module.ts :(我正在导入MatDialogModule)
...
import { MatDialogModule } from '@angular/material/dialog';

@NgModule({
    declarations: [
        ...
    ],
    imports: [
        ...
        MatDialogModule
    ],
    providers: [],
    bootstrap: [AppComponent]
})
export class AppModule { }
mycomponent.ts:
import { Component, OnInit, ViewChild, Inject } from '@angular/core';
import { MatDialog, MatDialogModule, MAT_DIALOG_DATA, MatDialogConfig } from '@angular/material/dialog';
...

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

    constructor(public dataDialogHandler: MatDialog) {}

    ngOnInit(): void {}

    public openDataDialog(): void {

        const dialogConfig = new MatDialogConfig();

        dialogConfig.data = {};

        this.dataDialogHandler.open(DataDialogComponent, dialogConfig);
    }
}

@Component({
    selector: 'data-dialog',
    templateUrl: './data-dialog.html'
})
export class DataDialogComponent {

    constructor(@Inject(MAT_DIALOG_DATA) public data: DialogData) {}
}

export interface DialogData {}
data-dialog.html:
<h2 mat-dialog-title>some title</h2>
<mat-dialog-content>
    <p>dialog works</p>
</mat-dialog-content>
<mat-dialog-actions align="end">
    <button mat-button mat-dialog-close>Close</button>
</mat-dialog-actions>

最后,在my.component.html中:
<button mat-button (click)="openDataDialog()">View Dialog</button>

我在这里做错了什么?提前致谢!
@angular/core 9.0.7
@angular/cdk 9.1.3
@angular/material 9.1.3
typescript 3.7.5

最佳答案

请在声明数组和app.module.ts的entryComponents数组中添加 DataDialogComponent

import { MatDialogModule } from '@angular/material/dialog';

@NgModule({
    declarations: [
       DataDialogComponent //I think you have missed this declaration
    ],
    imports: [
        ...
        MatDialogModule
    ],
    providers: [],
   entryComponents: [DataDialogComponent]
    bootstrap: [AppComponent]
})
export class AppModule { }

关于 Angular Material : 'mat-dialog-content' is not a known element,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/60789734/

相关文章:

node.js - 无法安装 "@angular/cli"

css - 在组件中使用 CSS 动画显示和隐藏

javascript - 如何在 typescript 中声明私有(private)类成员的参数和返回类型?

angular - 我的 sidenav 不推送内容,它克服了它

html - 如何在垫输入字段中聚焦时更改垫图标颜色?

angular - 如何停止 mat-autocomplete 以将自定义用户输入值与给定选项分开?

angular - 使用 Angular 2 调用 Web API Controller

angular - 如何使用间隔以响应式编程方式刷新数据?

javascript - React 如何根据 if else 条件返回标签消息

Angular 2 http 没有捕获连接被拒绝的错误