【问题标题】:angular dialog open is not working打开的角度对话框不起作用
【发布时间】:2018-02-17 21:36:48
【问题描述】:

我刚刚开始学习 Angular 5,我只需要在单击按钮时打开一个对话框。应用程序无法构建,我出现的错误是“类型仪表板组件上不存在错误 ts2339 属性对话框” 然后我安装了角度材料和cdk。编译时仍然出现相同的错误。在 html 页面(本地主机:4200)上,我得到的错误是'无法读取未定义的属性'打开''。如何获取对话框并打开 Angular 工作?

打字稿:

import { Component, OnInit } from '@angular/core';
import { WebapiService } from '../providers/webapi.service';
import { MatDialog, MatDialogRef } from '@angular/material';
import { ServerDialogComponent } from '../server-dialog/server-dialog.component';

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

  constructor(private webApi: WebapiService) { }

  ngOnInit() {
  }

  openServerDialog() {

    const serverDialogRef = this.dialog.open(ServerDialogComponent, {
      width: '250px',
      data: { serverlist: this.webApi.getServerList() }
    });
  }
}

html:

<div class="main-content">
  <div class="container-fluid">
    <button mat-fab color="warning" (click)="openServerDialog()">open</button>
  </div>
</div>

【问题讨论】:

    标签: angular typescript


    【解决方案1】:

    你需要创建一个dialog within your constructor,没有this.dialog.open(...)会导致Cannot read property 'open' of undefined

    constructor(public dialog: MatDialog, private webApi: WebapiService) {
    }
    

    【讨论】:

    • 即使在构造函数中有它也不起作用。我正在使用 Ag-Grid 和一个操作按钮
    【解决方案2】:

    首先在 AppModule 中导入 MatDialogModule

    import {MatDialogModule} from '@angular/material/dialog';
    import { BrowserModule } from '@angular/platform-browser';
    import { NgModule } from '@angular/core';
    
    import { AppComponent } from './app.component';
    
    @NgModule({
      declarations: [
        AppComponent
      ],
      imports: [
        BrowserModule,
    MatDialogModule
      ],
      providers: [],
      bootstrap: [AppComponent]
    })
    export class AppModule { }
    

    HTML 文件

    <button mat-raised-button (click)="openServerDialog()">Pick one</button>
    

    TS 文件

    import { WebapiService } from '../providers/webapi.service';
    import {Component, Inject,OnInit } from '@angular/core';
    import {MatDialog, MatDialogRef, MAT_DIALOG_DATA} from '@angular/material';
    import { ServerDialogComponent } from '../server-dialog/server-dialog.component';
    
    @Component({
      selector: 'app-dashboard',
      templateUrl: './dashboard.component.html',
      styleUrls: ['./dashboard.component.scss']
    })
    export class DashboardComponent implements OnInit {
    
      constructor(public dialog: MatDialog,private webApi: WebapiService) { }
    
      ngOnInit() {
      }
    
      openServerDialog() {
    
        let serverDialogRef = this.dialog.open(ServerDialogComponent, {
          width: '250px',
          data: { serverlist: this.webApi.getServerList() }
        });
      }
    }
    

    ServerDialogComponent ts 文件

    @Component({
      selector: 'server_dialog_component ',
      templateUrl: 'server_dialog_component.html',
    })
    export class ServerDialogComponent {
    
      constructor(
        public dialogRef: MatDialogRef<ServerDialogComponent>,
        @Inject(MAT_DIALOG_DATA) public data: any) { }
    
      onNoClick(): void {
        this.dialogRef.close();
      }
    
    }
    

    【讨论】:

    • 我拥有你所解释的一切。但我得到对话框未定义错误。任何的想法 ?谢谢
    猜你喜欢
    • 2021-09-14
    • 2019-05-04
    • 1970-01-01
    • 2014-11-18
    • 2018-11-14
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-11-29
    相关资源
    最近更新 更多