angular appをローカルで開発 Angular Material導入まで
Angular CLIをグローバルにインストールする方法ではなく、ローカルでやる方法のメモ。
作業ホルダーを作成後、Angular CLIをインストール。
$ mkdir sample
$ cd sample
$ npm i @angular/cli
$ npx ng version //正しくインストールされたか確認
sample
の部分にプロジェクト名を。
$ npx ng new sample --directory=./
正常に行けばnpx ng serveコマンド
でサーバーを起動させる。
$ npx ng serve
公式サイト通りに作成していきます。
$ npm install --save @angular/material @angular/cdk @angular/animations
+ @angular/[email protected]
+ @angular/[email protected]
+ @angular/[email protected]
added 3 packages from 1 contributor, updated 1 package and audited 19202 packages in 5.838s
found 0 vulnerabilities
ただインストールしただけでは使えないので、BrowserAnimationsModule
をインポートする。app.module.ts
にインポートした場合は以下のようになる。Angular CLIを使ってインストールしたからといって自動で追記される訳ではない。
// app.module.ts
import { BrowserModule } from '@angular/platform-browser';
import { NgModule } from '@angular/core';
import { AppRoutingModule } from './app-routing.module';
import { AppComponent } from './app.component';
// 追記 ↓
import {BrowserAnimationsModule} from '@angular/platform-browser/animations';
@NgModule({
declarations: [
AppComponent
],
imports: [
BrowserModule,
AppRoutingModule,
// 追記 ↓
BrowserAnimationsModule
],
providers: [],
bootstrap: [AppComponent]
})
export class AppModule { }
Angular Materialはインポートして、宣言すれば使えるようになるわけではなく、ボタンならボタンをインポートするみたいなこと、そのつどやる必要がある。bootstrapみたいにインストールすれば、後はhtml側で使うやつを宣言すればいいというものではない。
// app.module.ts
import { BrowserModule } from '@angular/platform-browser';
import { NgModule } from '@angular/core';
import { AppRoutingModule } from './app-routing.module';
import { AppComponent } from './app.component';
import {BrowserAnimationsModule} from '@angular/platform-browser/animations';
// 追加↓ ボタンのモジュール、チェックボックのモジュールをインポート
import {MatButtonModule, MatCheckboxModule} from '@angular/material';
@NgModule({
declarations: [
AppComponent
],
imports: [
BrowserModule,
AppRoutingModule,
BrowserAnimationsModule,
// 追加↓ ボタンのモジュール、チェックボックのモジュールをインポート
MatButtonModule,
MatCheckboxModule
],
providers: [],
bootstrap: [AppComponent]
})
export class AppModule { }
/* ./src/styles.scss */
/* You can add global styles to this file, and also import other style files */
@import "~@angular/material/prebuilt-themes/indigo-pink.css";
toggleやsliderが使えるようにする為にhammerJSをインストール
$ npm install --save hammerjs
インポートはsrc/main.ts
でする。
// src/main.ts
import 'hammerjs';
./src/index.html
に追記する。
<!-- ./src/index.html -->
<!doctype html>
<html lang="en">
<head>
<meta charset="utf-8">
<title>AngularChat</title>
<base href="/">
<meta name="viewport" content="width=device-width, initial-scale=1">
<link rel="icon" type="image/x-icon" href="favicon.ico">
<!-- Material Icon-->
<link href="https://fonts.googleapis.com/icon?family=Material+Icons" rel="stylesheet">
</head>
<body>
<app-root></app-root>
</body>
</html>
このままapp.module.ts
にAngular Materialをインポートしても特に問題はないですが、インポートする部品の数が増えてくるとapp.module.ts
がゴチャゴチャしてくるので、分割します。
app配下にmaterial.module.ts
を作成。
// material.module.ts
import {NgModule} from '@angular/core';
import {
MatButtonModule,
MatCheckboxModule
} from '@angular/material';
@NgModule({
imports: [
MatButtonModule,
MatCheckboxModule
],
exports: [
MatButtonModule,
MatCheckboxModule
]
})
export class MaterialModule {}
あとは、app.module.ts
にmaterial.module.ts
をインポートするだけ。
// app.module.ts
import { BrowserModule } from '@angular/platform-browser';
import { NgModule } from '@angular/core';
import {BrowserAnimationsModule} from '@angular/platform-browser/animations';
import { AppRoutingModule } from './app-routing.module';
import { AppComponent } from './app.component';
import { MaterialModule } from './material.module';
@NgModule({
declarations: [
AppComponent
],
imports: [
BrowserModule,
AppRoutingModule,
BrowserAnimationsModule,
MaterialModule
],
providers: [],
bootstrap: [AppComponent]
})
export class AppModule { }
注意したいのは、material.module.ts
を作るとAngular CLI
のng generate
コマンドを使ってコンポーネントを作ろうとすると、More than one module matches. Use skip-import option to skip importing the component into the closest module.
と怒られるので、ng generate
コマンドのオプションを使う必要があります。
$ npx ng g c test --module=app.module.ts
基本的な設定が終わればあとは、使いたい部品を公式サイトから探してきてインポートして使う。