在 Angular 中建立可擴展和可折疊的側邊欄可以顯著增強應用程式的使用者體驗。本教程提供了建立此類側邊欄的逐步指南,其中包含圖示和平滑過渡。我們將涵蓋從設定元件結構到應用程式樣式和邏輯來切換側邊欄的所有內容。
可折疊側邊欄透過以下方式提高應用程式的可用性:
首先,請確保您安裝了 Angular CLI。如果沒有,請執行:
npm install -g @angular/cli
建立一個新的 Angular 專案:
ng new angular-sidebar cd angular-sidebar
產生必要的組件:
ng generate component sidebar
這將作為應用程式的主容器。新增側邊欄和用於切換其狀態的按鈕:
<div> <h4> <strong>app.component.ts</strong> </h4> <p>Add the logic to manage the sidebar's state:<br> </p> <pre class="brush:php;toolbar:false">import { Component } from '@angular/core'; @Component({ selector: 'my-app', templateUrl: './app.component.html', styleUrls: ['./app.component.scss'], }) export class AppComponent { isSidebarCollapsed = false; onSidebarToggle() { this.isSidebarCollapsed = !this.isSidebarCollapsed; } }
定義側邊欄的 HTML 結構,包括帶有巢狀項目的選單:
<div> <h4> <strong>sidebar.component.ts</strong> </h4> <p>Handle the toggle logic for menu items and sidebar:<br> </p> <pre class="brush:php;toolbar:false">import { Component, EventEmitter, Input, Output } from '@angular/core'; interface MenuItem { icon: string; label: string; children?: MenuItem[]; isOpen?: boolean; } @Component({ selector: 'app-sidebar', templateUrl: './sidebar.component.html', styleUrls: ['./sidebar.component.scss'], }) export class SidebarComponent { @Input() isSidebarCollapsed = false; @Output() sidebarToggle = new EventEmitter<void>(); menuItems: MenuItem[] = [ { icon: 'fas fa-home', label: 'Dashboard', isOpen: false, children: [ { icon: 'fas fa-chart-pie', label: 'Analytics' }, { icon: 'fas fa-tasks', label: 'Projects' }, ] }, { icon: 'fas fa-cog', label: 'Settings', isOpen: false, children: [ { icon: 'fas fa-user', label: 'Profile' }, { icon: 'fas fa-lock', label: 'Security' }, ] }, { icon: 'fas fa-envelope', label: 'Messages' } ]; toggleSidebar() { this.sidebarToggle.emit(); } toggleMenuItem(item: MenuItem) { // Only toggle if sidebar is not collapsed and item has children if (!this.isSidebarCollapsed && item.children) { item.isOpen = !item.isOpen; } } }
新增版面配置和轉場的全域樣式:
.app-container { display: flex; height: 100vh; overflow: hidden; } .content { flex-grow: 1; margin-left: 250px; transition: all 0.3s ease-in-out; background-color: #f4f6f7; overflow-y: auto; &-inner { padding: 2rem; max-width: 1200px; margin: 0 auto; } &-expanded { margin-left: 50px; } } .sidebar-toggle-btn { position: absolute; top: 1rem; left: 200px; // Default position when sidebar is expanded background-color: #2c3e50; border: none; color: #fff; padding: 0.5rem; border-top-right-radius: 0.5rem; border-bottom-right-radius: 0.5rem; cursor: pointer; z-index: 1001; box-shadow: 2px 0 5px rgba(0, 0, 0, 0.1); transition: all 0.3s ease; &:hover { background-color: #34495e; } &.sidebar-collapsed { left: 15px; // Position when sidebar is collapsed } }
定義側邊欄和選單的樣式:
.sidebar { background-color: #2c3e50; color: #ecf0f1; height: 100vh; width: 250px; position: fixed; top: 0; left: 0; z-index: 1000; transition: all 0.3s ease-in-out; overflow-x: hidden; box-shadow: 2px 0 5px rgba(0, 0, 0, 0.1); } .sidebar-header { display: flex; justify-content: center; align-items: center; padding: 1.5rem; position: relative; } .sidebar-logo { color: #fff; text-decoration: none; font-size: 1.5rem; font-weight: bold; text-align: center; } .sidebar-menu { padding: 1rem 0; ul { list-style-type: none; padding: 0; margin: 0; } } .sidebar-menu-item { position: relative; } .sidebar-item { display: flex; align-items: center; color: #ecf0f1; text-decoration: none; padding: 0.75rem 1rem; transition: all 0.2s ease; cursor: pointer; &:hover { background-color: rgba(255, 255, 255, 0.1); } &.menu-item-active { background-color: rgba(255, 255, 255, 0.2); } i { margin-right: 0.75rem; &.sidebar-item-arrow { margin-left: auto; font-size: 0.8rem; transition: transform 0.3s ease; &.rotated { transform: rotate(180deg); } } } &-text { opacity: 1; transition: opacity 0.3s ease-in-out; } &.has-children { position: relative; } } .sidebar-submenu { background-color: rgba(0, 0, 0, 0.1); .sidebar-item { padding-left: 3rem; font-size: 0.9rem; } } .sidebar-collapsed { width: 50px; .sidebar-menu-item { position: static; } .sidebar-item { i { margin-right: 0; } &-text, &-arrow { opacity: 0; width: 0; overflow: hidden; } } .sidebar-submenu { display: none; } }
啟動開發伺服器:
ng serve
導覽至 http://localhost:4200/ 以查看正在執行的側邊欄。
修改 sidebar.component.ts 中的 menuItems 陣列並提供適當的圖示類別。
是的,使用 Angular 的動畫模組在選單開啟和關閉時添加平滑的過渡。
更新 sidebar.component.scss 中展開和折疊狀態的寬度屬性。
本指南涵蓋了在 Angular 中建立功能性可擴充和可折疊側邊欄的所有基本步驟。您可以進一步客製化設計和功能以滿足您的應用需求。
以上是帶有圖示的 Angular 可展開和可折疊側邊欄的分步指南的詳細內容。更多資訊請關注PHP中文網其他相關文章!