How to Build a Minimal Angular 21 Dashboard — Header, Toggle Sidebar & Content AreaHow to Build a Minimal Angular 21 Dashboard — Header, Toggle Sidebar & Content Area

Hello everyone, if you’re in search of a responsive and user-friendly admin dashboard template in Angular 20+, then you’ve come to the right place! Today this blog post I will tell you How to Build a Minimal Angular 21 Dashboard — Header, Toggle Sidebar & Content Area?

Live demo

Prerequisites

  • Node.js (v20+ recommended)
  • Angular CLI (latest)
  • Basic TypeScript & Angular knowledge
  • A fresh Angular 21 project (ng new my-dashboard --routing --style=scss)

Guys now here is complete code structure and please follow and do carefully:

1. Create Layout Components and run below commands:


ng g c layout
ng g c layout/header
ng g c layout/sidebar
ng g c dashboard

2. app.html

Replace everything with this:

<app-layout></app-layout>

3. layout.html

This handles sidebar toggle + structure.

<div class="layout">
  <!-- Sidebar -->
  <app-sidebar [collapsed]="isCollapsed"></app-sidebar>

  <!-- Main Section -->
  <div class="main" [class.collapsed]="isCollapsed">
    <app-header (toggleSidebar)="toggleSidebar()"></app-header>

    <div class="content">
      <app-dashboard></app-dashboard>
    </div>
  </div>
</div>

4. Update layout.ts

import { Component } from '@angular/core';
import { Dashboard } from '../dashboard/dashboard';
import { Header } from './header/header';
import { Sidebar } from './sidebar/sidebar'
@Component({
  selector: 'app-layout',
  imports: [Dashboard, Header, Sidebar],
  templateUrl: './layout.html',
  styleUrl: './layout.css',
})
export class Layout {
   isCollapsed = false;

   toggleSidebar() {
    this.isCollapsed = !this.isCollapsed;
   }
}

5. Update layout.css

.layout {
  display: flex;
  height: 100vh;
  overflow: hidden;
}

.main {
  flex-grow: 1;
  transition: margin-left 0.3s ease;
  background: #f5f6fa;
}

.main.collapsed {
  margin-left: 60px;
}

.content {
  padding: 20px;
}

6. Update sidebar.html

<div class="sidebar" [class.collapsed]="collapsed">
  <h3 *ngIf="!collapsed">My App</h3>

  <ul>
    <li>Dashboard</li>
    <li>Settings</li>
    <li>Profile</li>
  </ul>
</div>

7. Update sidebar.ts

import { Component, Input } from '@angular/core';
import { CommonModule } from '@angular/common'
@Component({
  selector: 'app-sidebar',
  imports: [CommonModule],
  templateUrl: './sidebar.html',
  styleUrl: './sidebar.css',
})
export class Sidebar {
  @Input() collapsed = false;
}

8. Update sidebar.css

.sidebar {
  width: 220px;
  background: #1e1e2f;
  color: #fff;
  padding: 20px;
  height: 100vh;
  transition: width 0.3s ease;
}

.sidebar.collapsed {
  width: 60px;
}

.sidebar ul {
  list-style: none;
  padding: 0;
}

.sidebar li {
  padding: 12px 0;
  cursor: pointer;
}

9. Update header.html

<div class="header">
  <button class="toggle-btn" (click)="toggleSidebar.emit()">
    ☰
  </button>
  <h2>Dashboard</h2>
</div>

10. Update header.ts

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

@Component({
  selector: 'app-header',
  imports: [],
  templateUrl: './header.html',
  styleUrl: './header.css',
})
export class Header {
  @Output() toggleSidebar = new EventEmitter<void>();

}

11. Update header.css

.header {
  height: 60px;
  background: #fff;
  padding: 0 20px;
  display: flex;
  align-items: center;
  border-bottom: 1px solid #ddd;
}

.toggle-btn {
  font-size: 20px;
  background: none;
  border: none;
  cursor: pointer;
  margin-right: 20px;
}

12. Update dashboard.html

<h2>Welcome to your Dashboard</h2>

<p>This is your clean Angular 21 dashboard starter template.</p>

DONE!

You now have:

✔ Angular 21
✔ Clean layout
✔ Header
✔ Sidebar with toggle
✔ Dashboard page
✔ Pure Angular + CSS
✔ No heavy UI framework


If you want next:
🔥 Add routing
🔥 Add User Management page
🔥 Add reusable components
🔥 Add animations for sidebar
🔥 Add dark mode

Just tell me “let’s continue”.

Ajay

Thanks

By therichpost

Hello to all. Welcome to therichpost.com. Myself Ajay Malhotra and I am freelance full stack developer. I love coding. I know WordPress, Core php, Angularjs, Angular 19, MedusaJs, Next.js, Bootstrap 5, Nodejs, Laravel, Codeigniter, Shopify, Squarespace, jQuery, Google Map Api, Vuejs, Reactjs, Big commerce etc.