角度材质样式未正确应用

Mad*_*Mac 13 angular-material angular angular7

任何想法为什么没有正确应用角度材料样式?

我知道对此有很多问题,但我似乎无法找到解决我问题的方法。我已经在几个项目中毫无问题地使用了角度材料,但似乎无法弄清楚这里发生了什么。
我可能忽略了一些简单的东西,但就是看不到它。我刚刚升级到 angular 7,所以它可能与此有关。

这是我的对话框,它只显示在带有奇怪或没有样式的父页面中。它正在做一些事情,因为与取消按钮相比,您可以看到按钮略有变化。

在此处输入图片说明

<div>
  <h4 mat-dialog-title>New Course Item</h4>
</div>
<div mat-dialog-content>
    <div>
        <div>
          <mat-form-field>
              <mat-label>Title</mat-label>
              <input type="text" [(ngModel)]="newCourseItem.title" #title="ngModel" matInput required placeholder="Title" name="title"/>
              <mat-error *ngIf="title.hasError('required')">This field is required</mat-error>
          </mat-form-field>
        </div>
        <div>
          <button (click)="this.dialogRef.close()">Cancel</button>
          <button mat-raised-button color="primary" [mat-dialog-close]="newCourseItem" cdkFocusInitial>Add New</button>
        </div>
      </div>
</div>

import { CourseItem } from './../../../../models/course-item';
import { Component, OnInit, Inject } from '@angular/core';
import { MatDialogRef, MAT_DIALOG_DATA } from '@angular/material';

@Component({
  selector: 'app-new-course-item-dialog',
  templateUrl: './new-course-item-dialog.component.html',
  styleUrls: ['./new-course-item-dialog.component.css']
})
export class NewCourseItemDialogComponent implements OnInit {
  newCourseItem: CourseItem = new CourseItem();

  constructor(public dialogRef: MatDialogRef<NewCourseItemDialogComponent>,
    @Inject(MAT_DIALOG_DATA) public data: any) { }

  ngOnInit() {
  }

}

import { BrowserModule } from '@angular/platform-browser';
import { NgModule } from '@angular/core';
import { HttpClientModule } from '@angular/common/http';
import { AppRoutingModule } from './app-routing.module';
import { AppComponent } from './app.component';

import { MatInputModule, MatDialogModule, MatButtonModule, MatFormFieldModule } from '@angular/material';
import {BrowserAnimationsModule} from '@angular/platform-browser/animations';

import { FormsModule, ReactiveFormsModule } from '@angular/forms';

@NgModule({
  declarations: [
    AppComponent,
    LoginComponent,
    CourseAdminComponent,
    NewCourseItemDialogComponent
  ],
  imports: [
    BrowserModule,
    AppRoutingModule,
    HttpClientModule,
    FormsModule,
    ReactiveFormsModule,
    MatDialogModule,
    BrowserAnimationsModule,
    MatButtonModule,
    MatInputModule,
    MatFormFieldModule
  ],
  providers: [
    AuthService,
    DataService
  ],
  bootstrap: [AppComponent],
  entryComponents: [
    NewCourseItemDialogComponent
  ]
})
export class AppModule { }


Angular CLI: 7.0.5
Node: 10.7.0
OS: win32 x64
Angular: 7.0.4
... animations, cdk, common, core, material

Package                             Version
-------------------------------------------------------------
@angular-devkit/architect           0.10.5
@angular-devkit/build-angular       0.10.5
@angular-devkit/build-optimizer     0.10.5
@angular-devkit/build-webpack       0.10.5
@angular-devkit/core                7.0.5
@angular-devkit/schematics          7.0.5
@angular/cli                        7.0.5
@angular/compiler                   7.0.3
@angular/compiler-cli               7.0.3
@angular/flex-layout                7.0.0-beta.19
@angular/forms                      7.0.3
@angular/http                       7.0.3
@angular/language-service           7.0.3
@angular/platform-browser           7.0.3
@angular/platform-browser-dynamic   7.0.3
@angular/router                     7.0.3
@ngtools/webpack                    7.0.5
@schematics/angular                 7.0.5
@schematics/update                  0.10.5
rxjs                                6.3.3
typescript                          3.1.6
webpack                             4.19.1
Run Code Online (Sandbox Code Playgroud)

Mad*_*Mac 20

来自@user18994 和@SiddAjmera 的评论回答了这个问题。

第 4 步:包含主题

需要包含主题才能将所有核心和主题样式应用于您的应用程序。

要开始使用预构建的主题,请在您的应用程序中全局包含 Angular Material 的预构建主题之一。如果你使用的是 Angular CLI,你可以将它添加到你的 styles.css 中:

@import "~@angular/material/prebuilt-themes/indigo-pink.css";

如果您没有使用 Angular CLI,您可以通过 index.html 中的元素包含一个预构建的主题。

有关主题的更多信息以及如何创建自定义主题的说明,请参阅主题指南。

来源:https : //material.angular.io/guide/getting-started

  • 我使用 Angular CLI 并选择了深紫色/琥珀色主题。该表被搞乱了,不仅是它实际上没有导入到我的 Angular 项目中,不确定他们的 npm 工具中是否存在错误?你的回答让我重新检查,然后我找到了罪魁祸首。 (2认同)
  • 有多种方法可以错过此主题导入。就我而言,我创建了一个空工作区,添加了一个库,然后添加了一个应用程序项目。我返回并运行“ng add @angular/material”,我在交互式生成器中输入了默认主题,但它从未将主题导入添加到 styles.scss 文件中。在我手动添加后,材质组件看起来是正确的。 (2认同)
  • 在文档中,据说您不需要做任何事情,Angular Material 就可以工作,但没有提到您必须导入主题。太糟糕了! (2认同)

小智 7

有时缺少 app.module.ts 中的导入会导致此问题。确保您已导入您在 HTML 中使用的所有模块。

根据最新的角度材料文档,您必须从各自的包中导入模块而不是 @angular/material/

所以代替

import { MatToolbarModule , MatButtonModule, MatIconModule} from '@angular/material';
Run Code Online (Sandbox Code Playgroud)

你必须像这样导入

import { MatToolbarModule } from '@angular/material/toolbar';
import { MatButtonModule } from '@angular/material/button';
import { MatIconModule } from '@angular/material/icon';
Run Code Online (Sandbox Code Playgroud)