@ angular2-material 2.0.0-alpha.8-2バージョンを使用しているangular2アプリケーションがあります。すべて正常に動作します。そこで、マテリアルバージョンを最新の2.0.0-alpha.9-3にアップグレードすることにしました。 GETTING_STARTED に記載されている手順に従いました。以前、以下のように個々のモジュールをインポートしました。
@NgModule({
imports: [
BrowserModule,
FormsModule,
HttpModule,
RouterModule,
MdIconModule,
MdButtonModule,
MdCardModule,
MdCheckboxModule,
....
....
ただし、2.0.0-alpha.9-3バージョンの変更ログには次のように記載されています。
「Angular Materialは@ angular2-material/...パッケージから@ angular/materialの下の単一のパッケージに変更されました。この変更に加えて、すべてのコンポーネントを含む新しいNgModule MaterialModuleがあります。」
そこで、明示的にインポートされたマテリアルモジュールを削除し、次のように変更しました。
@NgModule({
imports: [
BrowserModule,
FormsModule,
HttpModule,
RouterModule,
MaterialModule.forRoot(),
....
....
この変更後、次のエラーが発生します
'md-icon'は既知の要素ではありません:
個々のモジュールを明示的にインポートする必要がありますか、または変更ログで説明されているように、MaterialModuleにはすべてのコンポーネントが含まれていますが、個々のモジュールを明示的にインポートしないでください。個々のモジュールをインポートしない場合、エラーの原因は何ですか?
export
セクションはどうですか?そこにMaterialModule
を提供しましたか?
@NgModule({
imports: [
MaterialModule.forRoot()
],
exports: [
MaterialModule
]
})
Index.htmlでアイコンスタイルを提供することを忘れないでください:
<link href="https://fonts.googleapis.com/icon?family=Material+Icons" rel="stylesheet">
その後、ビューでアイコンを使用できるようになります。
<md-icon>delete</md-icon>
このような子モジュールをロードする場合:
{path: 'childModule', loadChildren: 'app/child/child.module#childModule'}
子モジュールでは、MaterialModuleを再度インポートする必要があります。例えば.
@NgModule({
imports: [
sharedModules,
childRouting,
MaterialModule.forRoot()
],
declarations: [
],
providers: []
})
export class childModule {
}
App.module.tsでMatIconModuleをインポートし、同じファイルのインポート配列に追加する必要があります。
たとえば次のように:
import { BrowserModule } from "@angular/platform-browser";
import { NgModule } from "@angular/core";
import { BrowserAnimationsModule } from "@angular/platform-browser/animations";
import { TreeModule } from "angular-tree-component";
import { HttpClientModule } from "@angular/common/http";
import { MatButtonModule } from "@angular/material/button";
import { MatIconModule } from "@angular/material/icon"; // <----- Here
import { EclassService } from "./services/eclass.service";
import { AppComponent } from "./app.component";
import { FormsModule } from "@angular/forms";
import { AsyncTreeComponent } from "./components/async-tree/async-tree.component";
@NgModule({
declarations: [
AppComponent,
AsyncTreeComponent
],
imports: [
BrowserModule, BrowserAnimationsModule, FormsModule, TreeModule, HttpClientModule, MatButtonModule, MatIconModule // <--- HERE
],
providers: [EclassService],
bootstrap: [AppComponent]
})
export class AppModule { }
追加
<link href="https://fonts.googleapis.com/icon?family=Material+Icons" rel="stylesheet">
index.html
へ
および<i class="material-icons">delete</i>
の代わりに<md-icon>delete</md-icon>
Mat-iconを使用する2つの手順:
これをindex.htmlファイルに挿入します。
<link href="https://fonts.googleapis.com/icon?family=Material+Icons"
rel="stylesheet">
この行をapp.module.tsファイルに挿入します。遅延読み込みを実行する場合は、そのモジュールまたはsharedModuleに含めます。
import { MatIconModule } from '@angular/material/icon';
解決策は、md-icon、md-inputなどのモジュールとスタイルシートを追加することです。
App.module.tsに以下のようにCUSTOM_ELEENT_SCHEMAを追加する必要もあります。
import { NgModule, CUSTOM_ELEMENTS_SCHEMA } from '@angular/core';
それから加えて
providers: [],
bootstrap: [AppComponent],
schemas: [CUSTOM_ELEMENTS_SCHEMA]
これをindex.htmlに追加します。
<link href="https://fonts.googleapis.com/icon?family=Material+Icons" rel="stylesheet">
app.module.tsファイルに次を追加します。
import {
MatIconModule
} from '@angular/material';
imports: [MatIconModule]