Angularの基本2(コンポーネントとルーティングモジュールの作成)

目次

1.Angularの開発環境
(1)ホストOS
 Windows 10 Pro
(2)仮想環境(VirtualBox)
 ・ゲストOS:CentOs8(Red Hat 64-bit)
 ・Node.js:v14.18.1($ node –version)
 ※Nodejsのv16.13.0はAngular CLIでサポートされていないため、v14.18.1に変更した。
 ・npm:6.14.11($ npm –version)
 ・Angular CLI:12.2.12($ ng –version)

2.Angularアプリケーションの作成
 Menu、Menue1、Menu2のコンポーネントを作成し、Menuの画面からMenu1、又はMenu2を呼び出す。また、Menu1とMenu2には「back」を選択することでMenuに戻る。

2.1 プロジェクトの作成
(1)Angular CLI コマンドを実行
 ng new
 $ ng new angular-sample1
 ? Would you like to add Angular routing? Yes
 ? Which stylesheet format would you like to use? CSS
 ※プロジェクト名はsample-1は無効、sample1は有効。
(2)Angularサンプル画面の表示
 project-nameのフォルダで下記コマンドを実行する。
 $ ng serve –host 0.0.0.0 –port 8080

・仮想マシンのブラウザで下記urlに接続
http://127.0.0.1:8080

2.2 コンポーネントの作成
(1)ターミナルウィンドウから、アプリケーションを含むディレクトリに移動
(2)Angular CLI コマンドを実行
  ng generate component <component-name>
$ ng generate component menu
$ ng generate component menu1
$ ng generate component menu2

src/app/に追加したコンポーネントの名前のフォルダが作成される
・コンポーネントファイル .component.ts
・テンプレートファイル .component.html
・CSS ファイル .component.css
・テスト仕様ファイル .component.spec.ts

(3)コンポーネントとテンプレートの作成
「menu.component.html」

<div class="menu">
  <ul>
     <li><a routerLink="/menu1">Menu1</a></li>
     <li><a routerLink="/menu2">Menu2</a></li>
  </ul>
</div>

「menu.component.ts」

import { Component, OnInit } from '@angular/core';

@Component({
  selector: 'app-menu',
  templateUrl: './menu.component.html',
  styleUrls: ['./menu.component.css']
})
export class MenuComponent implements OnInit {

  constructor() { }

  ngOnInit(): void {  }

}

「menu1.component.html」

<p>{{title}}</p>
<li><a routerLink="/">back</a></li>

「menu1.component.ts」

import { Component, OnInit } from '@angular/core';

@Component({
  selector: 'app-menu1',
  templateUrl: './menu1.component.html',
  styleUrls: ['./menu1.component.css']
})
export class Menu1Component implements OnInit {
  title:string; //追加
  constructor() {
      this.title='This is a menu1 of angular-sample1';  //追加
    }

  ngOnInit(): void {
  }

}

「menu2.component.html」

<p>{{title}}</p>
<li><a routerLink="/">back</a></li>

「menu2.component.ts」

import { Component, OnInit } from '@angular/core';

@Component({
  selector: 'app-menu2',
  templateUrl: './menu2.component.html',
  styleUrls: ['./menu2.component.css']
})
export class Menu2Component implements OnInit {
    title:string;  //追加
  constructor() {
        this.title='This is a menu2 of angular-sample1';  //追加
   }

  ngOnInit(): void {
  }

}

(4)ルートコンポーネント
AngularCLIコマンドでプロジェクトを作成するとき自動的に作成される。
ルートコンポーネントはアプリ起動時に最初に呼び出される。
「app.component.html」

<app-menu></app-menu>
<div class="main">
   <router-outlet></router-outlet>
</div>

・<router-outlet>はルーティングされたビューをどこに表示するかをルーターに教える
(参考)
ルーティングを使ったナビゲーションの追加
https://angular.jp/tutorial/toh-pt5

「app.component.ts」

//コンポーネントで利用するモジュールをインポート
import { Component } from '@angular/core';
//@Component デコレーターでコンポーネント情報を宣言
@Component({
  //コンポーネントの適用先を表すセレクター式
  selector: 'app-root',
  //コンポーネントに適用するビュー(テンプレート)
  templateUrl: './app.component.html',
  //コンポーネントに適用するスタイル
  styleUrls: ['./app.component.css']
})
//コンポーネントクラス
export class AppComponent {
  title = 'angular-sample1';
}

(5)ルートモジュール
  アプリを起動するときに呼び出されるモジュール。
 AngularCLIコマンドでコンポーネントを作成するとき自動的に追加される。
「app.module.ts」

//アプリを起動するときに呼び出されるモジュール(ルートモジュール)
// Angularのモジュールをインポート
import { NgModule } from '@angular/core';
import { BrowserModule } from '@angular/platform-browser';
//コンポーネントのインポート
import { AppRoutingModule } from './app-routing.module';
import { AppComponent } from './app.component';
import { MenuComponent } from './menu/menu.component';
import { Menu1Component } from './menu1/menu1.component';
import { Menu2Component } from './menu2/menu2.component';
//モジュール情報の宣言
@NgModule({
    //モジュール配下のコンポーネント
  declarations: [
    AppComponent,
    MenuComponent,
    Menu1Component,
    Menu2Component
  ],
    //現在のモジュールで利用する他のモジュール/コンポーネント
  imports: [
    BrowserModule,
    AppRoutingModule
  ],
  providers: [],
  bootstrap: [AppComponent]
})
//モジュールクラス
export class AppModule { }

(6)ルーティングモジュール
 プロジェクト作成時にルーティングモジュールの追加を行っていないときはルーティングモジュールを作成する。
「app-routing.module.ts」

import { NgModule } from '@angular/core';
import { RouterModule, Routes } from '@angular/router';

import { Menu1Component } from './menu1/menu1.component'; //追加
import { Menu2Component } from './menu2/menu2.component'; //追加

const routes: Routes = [
    { path: 'menu1', component: Menu1Component },  //追加
    { path: 'menu2', component: Menu2Component },  //追加

];

@NgModule({
  imports: [RouterModule.forRoot(routes)],
  exports: [RouterModule]
})
export class AppRoutingModule { }

・@NgModuleメタデータはルーターを初期化し、ブラウザのロケーションの変更を待機する。

(7)メインページ
 アプリを動作させるためのメインページはアプリケーションルート直下(/srcフォルダー)に配置される。
「index.html」

<!doctype html>
<html lang="en">
<head>
  <meta charset="utf-8">
  <title>AngularSample1</title>
  <base href="/">
  <meta name="viewport" content="width=device-width, initial-scale=1">
  <link rel="icon" type="image/x-icon" href="favicon.ico">
</head>
<body>
  <!-- ルートコンポーネントの呼び出し-->
  <app-root></app-root>
</body>
</html>

The end