ふるてつのぶろぐ

福岡在住のエンジニアです。

写真提供:福岡市

Angular6 + Bootstrap4でWebアプリを作ろう(コンポーネント)

こんにちはふるてつです。 今回はAngularのコンポーネントについて書いてみます。

CLIコマンドについて

Angularでコンポーネントを作るには、基本的にはCLIコマンドを使ったほうが便利です。
文法は意外と簡単です。
ng g component xxx

コンポーネント以外にはモジュールやサービスも作れます。
そこは公式ドキュメントで確認ください。
https://angular.jp/cli/generate

コンポーネントの考え方

では1画面のどこをコンポーネントに分けるかですけど。

私の場合は、もとからあった「app.component」に加えて、①ヘッダー「header.component」と ②フッター「footer.component」を追加しました。
ヘッダーはBootStrapのメニュー部分にします。
フッターは会社情報などにしようと思ってます。

f:id:tetsufuru:20181111223551p:plain:w500

vscodeでみると下記のような感じです。
下の写真の左側に3つコンポーネントが並びます。
写真右側はapp.componentのhtmlで①ヘッダーのセレクタと、②フッターのセレクタを呼び出すようにしています。
あと中身の部分はルーター<router-outlet>で変えられるようにしました。

f:id:tetsufuru:20181111221937p:plain:w500

app.component.htmlの中身例

<div class="container-fluid">
  <app-header></app-header>
  <router-outlet></router-outlet>
  <app-footer></app-footer>
</div>

footer.component.tsの中身例

import { Component, OnInit } from '@angular/core';
@Component({
  selector: 'app-footer',
  templateUrl: './footer.component.html',
  styleUrls: ['./footer.component.css']
})
export class FooterComponent implements OnInit {
  constructor() { }
  ngOnInit() {
  }
}

今日の感想

以上、検索画面を例にコンポーネントの分け方を考えてみました。
補足になりますがこの画面の分け方だとログイン画面の場合もメニューが表示されてしまいます。
わたしはそこは下のような感じでルーターのURLでメニューを非表示にしました。

<div *ngIf="this.router.url!=='/loginUrl'">
 …メニューの内容
</div>

例に挙げた検索画面ですが「検索結果の件数」と「ページ番号」表示を一覧の上下につけていますが、 同じものが2つあるのが嫌でこれもコンポーネントにしたほうが良いのかなと思っています。

では、ありがとうございました。