【问题标题】:Angular Material styles not applying on child componentAngular Material 样式不适用于子组件
【发布时间】:2018-04-10 08:36:18
【问题描述】:

我遇到了角度材质默认样式的问题。 我有一个父仪表板组件,它的子组件名为 “HomComponent”和“RegistrationComponent”。Angular Material 的输入框和按钮在仪表板页面中工作正常,但在子组件中只能看到 HTml 按钮和输入框。 请看下面的代码。

DashBoardRouting.ts:

import { NgModule } from '@angular/core';
import { Routes, RouterModule } from '@angular/router';
import { DashboardComponent } from './dashboard.component';
import { home} from './home/home-routing.module';
import { regis } from './registration/registration-routing.module';

export const dashboard: Routes = [
  {
    path : 'dashboard',
    component :DashboardComponent,
    children:[
      ...home,
      ...regis
    ]
  },

];

@NgModule({
  imports: [RouterModule.forChild(dashboard)],
  exports: [RouterModule]
})
export class DashboardRoutingModule { }

HomeCompoennt.html:

<form class="example-form" >
  <mat-form-field class="example-full-width">
    <input matInput placeholder="Username">
  </mat-form-field>
  </form>

app.module.ts:

import { BrowserModule } from '@angular/platform-browser';
import { NgModule,CUSTOM_ELEMENTS_SCHEMA } from '@angular/core';
import { AppComponent } from './app.component';
import { DashboardComponent } from './dashboard/dashboard.component';
import { LoginComponent } from './login/login.component';
import {BrowserAnimationsModule} from '@angular/platform-browser/animations';
import { AppRoutingRoutingModule } from './app-routing-routing.module';
import {MatInputModule} from '@angular/material/input';
import {MatButtonModule} from '@angular/material/button';
import {MatStepperModule} from '@angular/material/stepper';
import {CdkTableModule} from '@angular/cdk/table';
import { FormsModule, ReactiveFormsModule } from '@angular/forms';
import { LoginModule } from './login/login.module';
import { DashboardModule } from './dashboard/dashboard.module';
import 'hammerjs';

@NgModule({
  declarations: [
    AppComponent,DashboardComponent, LoginComponent

  ],
  imports: [

    BrowserModule,BrowserAnimationsModule,AppRoutingRoutingModule,MatInputModule,MatButtonModule,
    MatStepperModule,CdkTableModule,FormsModule,ReactiveFormsModule,LoginModule,DashboardModule
  ],

  providers: [],
  bootstrap: [AppComponent],
  schemas:[CUSTOM_ELEMENTS_SCHEMA]
})
export class AppModule { }

【问题讨论】:

  • 为什么需要CUSTOM_ELEMENTS_SCHEMA

标签: angular angular-material angular-material2


【解决方案1】:

你错过了MatFormFieldModuleMatInputModule 允许原生 &lt;input&gt;&lt;textarea&gt; 元素与 &lt;mat-form-field&gt; 一起使用,而 MatFormFieldModule 用于 &lt;mat-form-field&gt; 本身。

附:考虑为 Angular Material 组件使用专用模块。

import { MatFormFieldModule } from '@angular/material/form-field';

// ...

@NgModule({
  imports: [
    MatFormFieldModule,
    // ...
  ]
})
export class MaterialModule { }

【讨论】:

  • 嗨,我也尝试过导入表单模块,但它不起作用。
  • 投反对票的人,你能解释一下你为什么投反对票吗?