Я следовал этому руководству, чтобы настроить материал для своего проекта.
Идея состоит в том, чтобы создать общий модуль для повторного использования в приложении- https://material.angular.io/guide/getting-started
Создано material.module.ts
import { NgModule } from '@angular/core';
import {
MatToolbarModule, MatButtonModule, MatSidenavModule,
MatIconModule, MatListModule, MatMenuModule, MatGridListModule,
.....
} from '@angular/material';
import { OverlayModule } from '@angular/cdk/overlay';
import { DragDropModule } from '@angular/cdk/drag-drop';
@NgModule({
imports: [
MatToolbarModule,
MatButtonModule,
MatSidenavModule,
MatIconModule,
MatListModule,
MatMenuModule,
MatGridListModule,
MatFormFieldModule,
MatInputModule,
MatStepperModule,
MatSelectModule,
........
],
exports: [
MatToolbarModule,
MatButtonModule,
MatSidenavModule,
MatIconModule,
MatListModule,
MatMenuModule,
MatGridListModule,
MatFormFieldModule,
MatInputModule,
MatStepperModule,
MatSelectModule,
......
]
})
export class MaterialModule { }
измененный app.module.ts
import { MaterialModule } from './material.module';
и
imports: [
MaterialModule,
Затем я создал диалоговое окно компонентов пользовательского дизайна:
alert.component.ts
import { Component, Inject } from '@angular/core';
import { MAT_DIALOG_DATA } from '@angular/material';
import { CommonModule } from '@angular/common';
import { NgModule } from '@angular/core';
//tried with and without the following line just incase
import {MaterialModule} from '../../../../material.module';
@Component({
selector: 'app-alert',
templateUrl: './alert.component.html',
styleUrls: ['./alert.component.scss']
})
@NgModule({
imports: [
CommonModule,
MaterialModule
]
})
export class AlertComponent {
constructor(
@Inject(MAT_DIALOG_DATA)
public data: ModalAlertData
) { }
getAlertIcon() {
switch (this.data.alertType) {
case AlertType.INFO:
return 'info';
case AlertType.WARNING:
return 'warning';
case AlertType.ERROR:
return 'error';
}
}
}
export class ModalAlertData {
title: string;
content: string;
alertType: AlertType;
closeButtonLabel: string;
constructor(data?) {
if (data) {
this.title = data.title;
this.content = data.content;
this.alertType = data.alertType;
this.closeButtonLabel = data.closeButtonLabel;
}
}
}
export enum AlertType {
INFO, WARNING, ERROR
}
alert.component.html
<h2 mat-dialog-title>{{ data.title }}</h2>
<mat-dialog-content>
<div>
<mat-icon>{{ getAlertIcon() }}</mat-icon>
{{ data.content }}
</div>
</mat-dialog-content>
<mat-divider></mat-divider>
<mat-dialog-actions align="center">
<button mat-raised-button color="primary" [mat-dialog-close]="data.title">
{{ data.closeButtonLabel }}
</button>
</mat-dialog-actions>
Я получаю эту ошибку во время выполнения
Uncaught Error: Template parse errors:
'mat-icon' is not a known element:
1. If 'mat-icon' is an Angular component, then verify that it is part of this module.
2. If 'mat-icon' is a Web Component then add 'CUSTOM_ELEMENTS_SCHEMA' to the '@NgModule.schemas' of this component to suppress this message. ("
<mat-dialog-content>
<div>
[ERROR ->]<mat-icon>{{ getAlertIcon() }}</mat-icon>
{{ data.content }}
</div>
"): ng:///ComponentModule/AlertComponent.html@3:4
'mat-dialog-content' is not a known element:
1. If 'mat-dialog-content' is an Angular component, then verify that it is part of this module.
2. If 'mat-dialog-content' is a Web Component then add 'CUSTOM_ELEMENTS_SCHEMA' to the '@NgModule.schemas' of this component to suppress this message. ("<h2 mat-dialog-title>{{ data.title }}</h2>
[ERROR ->]<mat-dialog-content>
<div>