注意:メモ記事です!
ディレクトリ構造
-app
|-shared
|-header
|-sidenav
app.component
app.module
headerコンポーネント
<mat-toolbar> <button mat-icon-button class="" (click)="clickSidenav()"> <mat-icon>menu</mat-icon> </button> <span>ROK dashboard</span> <span class="header-spacer"></span> <button mat-icon-button> <mat-icon>home</mat-icon> </button> <button mat-icon-button> <mat-icon>logout</mat-icon> </button> </mat-toolbar>
import { Component, EventEmitter, OnInit, Output } from '@angular/core'; import { RoutingService } from 'src/app/core/services/routing.service'; @Component({ selector: 'app-header', templateUrl: './header.component.html', styleUrls: ['./header.component.scss'] }) export class HeaderComponent implements OnInit { //clicks sidenav and throw event @Output() sidenavToggle = new EventEmitter(); //get menuList constructor( private routingService : RoutingService ) { } ngOnInit(): void { } /** * Clicks toggle sidenav */ clickSidenav(): void{ this.sidenavToggle.emit(); } /** * clicks sign out */ clickSignOut(): void{ } }
sidenavコンポーネント
<mat-nav-list> <mat-list-item routerLink="" (click)="clickHome()"> <mat-icon>home</mat-icon> </mat-list-item> <mat-list-item *ngFor="let pageUrl of menuList"> <button mat-button routerLink="/{{pageUrl.url}}">{{pageUrl.page}}</button> </mat-list-item> </mat-nav-list>
import { Component, EventEmitter, OnInit, Output } from '@angular/core'; import { UrlConst,PAGEURLS, PageUrlPair } from 'src/app/pages/constants/url-const'; import { RouterModule, Routes } from '@angular/router'; @Component({ selector: 'app-sidenav', templateUrl: './sidenav.component.html', styleUrls: ['./sidenav.component.scss'] }) export class SidenavComponent implements OnInit { @Output() sidenavClose = new EventEmitter(); menuList:PageUrlPair[] = PAGEURLS; constructor() { } ngOnInit(): void { } /** * Clicks home */ public clickHome(): void { this.sidenavClose.emit(); } }
<!-- Sidenav container --> <mat-sidenav-container> <!-- Side navigation --> <mat-sidenav #sidenav mode="side" closed> <app-sidenav (sidenavClose)="sidenav.close()"></app-sidenav> </mat-sidenav> <!-- Main Contents --> <mat-sidenav-content> <!-- Header Contents --> <app-header (sidenavToggle)="sidenav.toggle()"></app-header> <!-- Main Contents --> <router-outlet></router-outlet> <!-- Footer Contents --> <app-footer></app-footer> </mat-sidenav-content> </mat-sidenav-container>