MatDialog无法正确显示

时间:2017-11-11 17:33:21

标签: angular

我正在尝试使用MatDialog并基于this example我已按如下方式实施了该对话框:

import {Component, Inject, OnInit} from '@angular/core';
import {Router} from '@angular/router';
import {AuthenticationService} from '../../../service/authentication.service';
import {MAT_DIALOG_DATA, MatDialog, MatDialogRef} from '@angular/material';

@Component({
  selector: 'app-home',
  templateUrl: './home.component.html',
  styleUrls: ['./home.component.css']
})
export class HomeComponent {

  constructor(private router: Router, public dialog: MatDialog) { }

  openDialog(): void {
    const dialogRef = this.dialog.open(CreateGroupDialogComponent);
  }    
}

@Component({
  selector: 'app-create-group-dialog',
  template: `
    <span>Hello World!</span>
  `
})
export class CreateGroupDialogComponent {
  constructor(public dialogRef: MatDialogRef<CreateGroupDialogComponent>) {  }
}

然而,即使按下相应按钮时对话框出现,我也明白了这一点:

enter image description here

未显示HTML模板,并且模式的尺寸错误。

我看不出问题所在。为什么模态没有正确绘制?

这是打开模态时生成的HTML代码。可以看出它是空的。

enter image description here

4 个答案:

答案 0 :(得分:24)

您需要将其添加到entryComponents

上的@NgModule
import { BrowserModule } from '@angular/platform-browser';
import { BrowserAnimationsModule } from '@angular/platform-browser/animations';
import { NgModule } from '@angular/core';
import { MatDialogModule, MatButtonModule } from '@angular/material';

import { AppRoutingModule } from './app-routing.module';

import { AppComponent } from './app.component';
import { LoginComponent } from './login/login.component';
import { HomeComponent, DialogOverviewExampleDialogComponent } from './home/home.component';


@NgModule({
  declarations: [
    AppComponent,
    LoginComponent,
    HomeComponent,
    DialogOverviewExampleDialogComponent
  ],
  imports: [
    BrowserModule,
    BrowserAnimationsModule,
    AppRoutingModule,
    MatDialogModule,
    MatButtonModule
  ],
  providers: [],
  bootstrap: [AppComponent],
  entryComponents: [
    DialogOverviewExampleDialogComponent
  ]
})
export class AppModule { }

Dup Angular2 material dialog has issues - Did you add it to @NgModule.entryComponents?

答案 1 :(得分:0)

在您的组件中使用正确的语法 从“ @ angular / material / dialog”导入{MatDialogModule};

和在app.module.ts中 您需要将其添加到@NgModule上的entryComponents

答案 2 :(得分:0)

自9.0版以来的新ivy编译器,不再需要entryComponents字段,并且已弃用。

我只是通过重新启动ng serve来解决此问题。

答案 3 :(得分:0)

更新 - 2021 年 4 月

使用 Ivy,解决此问题的方法不再是将您的组件添加到 entryComponents。我遇到了这个问题,更令人困惑的是,它在开发和生产中都在本地运行,但在我们部署的环境中不起作用。它只是默默地失败了。在我的头撞墙一整天后,我发现了一个循环依赖,由于某种原因没有抛出错误。删除此依赖项后,一切都会按预期进行。