MatDialog无法正确显示

dis*_*ame 12 angular

我正在尝试使用a MatDialog并基于此示例我已实现该对话框,如下所示:

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>) {  }
}
Run Code Online (Sandbox Code Playgroud)

但是,即使按下相应按钮时对话框出现,我得到的是:

在此输入图像描述

不显示HTML模板,并且模式的尺寸错误.

我不知道问题是什么.为什么模态没有正确绘制?

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

在此输入图像描述

fla*_*diu 34

你需要将它添加到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 { }
Run Code Online (Sandbox Code Playgroud)

的DUP Angular2材料对话框有问题-你将它添加到@ NgModule.entryComponents?

  • 还有其他人在升级到 Angular 9 后遇到这个问题吗?他们的文档说你不再需要声明“entryComponents”? (3认同)

Shr*_*ari 9

我遇到了这个问题并通过ngZone.run()方法解决了它。我使用的是Angular 13 ,所以不需要那些entryComponents

所以我有一个页面,可以在回调函数(如反馈表)上打开一个对话框(单独的组件)

但该对话框不会渲染所有与角度相关的组件,而仅渲染refund-popup.component.html和refund-popup.component.css中编写的Html CSS

这是因为回调来自角度区域之外。所以我只是让我的对话框在区域内运行。

解决方案

import { NgZone} from '@angular/core'
import { MatDialog } from '@angular/material/dialog';
import { RefundPopupComponent } from 'src/app/components/refund-popup/refund-popup.component';



@Component({
selector: 'app-create-profile',
templateUrl: './create-profile.component.html',
styleUrls: ['./create-profile.component.scss'],
})

export class CreateProfileComponent {
   constructor(private zone: NgZone , private dialog: MatDialog) {}
   
   someFunction() {
       this.zone.run(() => this.dialog.open(RefundPopupComponent}))

    }     
}
Run Code Online (Sandbox Code Playgroud)

我更新了之前和之后的图像,包括 ngZone run 方法之后

在 ngZone 运行之前

添加ngZone后