Je suis débutant en Angular, j'ai utilisé Angular 6 pour mon projet universitaire, J'ai créé une barre latérale et cela fonctionne bien, mais lorsque j'essaie d'ajouter un sous-menu, cela ne fonctionne pas.
Je veux savoir comment faire cela correctement.
I ' J'ai utilisé ce tableau de bord
Exemple de sous-menu
sidebar.ts strong>
export const AdminLayoutRoutes: Routes = [ { path: 'dashboard', component: DashboardComponent }, { path: 'class', component: ClassComponent }, { path: 'student', component: StudentComponent }, { path: 'profile', component: ProfileComponent}, ];
sidebar.html
<div class="logo"> <div class="logo-img"> </div> </div> <div class="sidebar-wrapper" style="margin-top: 2.5rem;"> <div *ngIf="isMobileMenu()"> <ul class="nav navbar-nav nav-mobile-menu"> <li class="nav-item"> <a class="nav-link" href="#pablo"> <i class="material-icons">dashboard</i> <p> <span class="d-lg-none d-md-block">Stats</span> </p> </a> </li> <li class="nav-item dropdown"> <a class="nav-link" href="#pablo" id="navbarDropdownMenuLink" data-toggle="dropdown" aria-haspopup="true" aria-expanded="false"> <i class="material-icons">notifications</i> <span class="notification">5</span> <p> <span class="d-lg-none d-md-block">Some Actions</span> </p> </a> <div class="dropdown-menu dropdown-menu-right" aria-labelledby="navbarDropdownMenuLink"> <a class="dropdown-item" href="#">Mike John responded to your email</a> <a class="dropdown-item" href="#">You have 5 new tasks</a> <a class="dropdown-item" href="#">You're now friend with Andrew</a> <a class="dropdown-item" href="#">Another Notification</a> <a class="dropdown-item" href="#">Another One</a> </div> </li> <li class="nav-item"> <a class="nav-link" href="#pablo"> <i class="material-icons">person</i> <p> <span class="d-lg-none d-md-block">Account</span> </p> </a> </li> </ul> </div> <ul class="nav"> <li routerLinkActive="active" *ngFor="let menuItem of menuItems" class="{{menuItem.class}} nav-item"> <a class="nav-link" [routerLink]="[menuItem.path]"> <i class="material-icons">{{menuItem.icon}}</i> <p>{{menuItem.title}}</p> </a> </li> </ul> </div>
routing.ts strong>
import { Component, OnInit } from '@angular/core'; declare const $: any; declare interface RouteInfo { path: string; title: string; icon: string; class: string; } export const ROUTES: RouteInfo[] = [ { path: '/dashboard', title: 'Dashboard', icon: 'home', class: '' }, { path: '/class', title: 'Class', icon: 'description', class: '' }, { path: '/student', title: 'Students', icon: 'apps', class: '' }, { path: '/profile', title: 'Profile', icon: 'person', class: '' }, ]; @Component({ selector: 'app-sidebar', templateUrl: './sidebar.component.html', styleUrls: ['./sidebar.component.css'] }) export class SidebarComponent implements OnInit { menuItems: any[]; constructor() { } ngOnInit() { this.menuItems = ROUTES.filter(menuItem => menuItem); } isMobileMenu() { if ($(window).width() > 991) { return false; } return true; }; }
3 Réponses :
Vous devez créer un ul
imbriqué avec * ngFor
imbriqué comme suit: Je n'ai pas encore implémenté show / hide ici, vous pouvez l'implémenter en fonction de vos besoins soit en utilisant css ou en utilisant angular.
export const ROUTES: RouteInfo[] = [ { path: '/dashboard', title: 'Dashboard', icon: 'home', class: '', children: [ { path: '/child1', title: 'Child Menu 1', icon: 'home', class: '' } ] }, { path: '/class', title: 'Class', icon: 'description', class: '' }, { path: '/student', title: 'Students', icon: 'apps', class: '' }, { path: '/profile', title: 'Profile', icon: 'person', class: '' }, ];
Dans vos routes, vous devez ajouter children
routes array et ajouter le chemin des enfants comme suit:
<ul class="nav"> <li routerLinkActive="active" *ngFor="let menuItem of menuItems" class="{{menuItem.class}} nav-item"> <a class="nav-link" [routerLink]="[menuItem.path]"> <i class="material-icons">{{menuItem.icon}}</i> <p>{{menuItem.title}}</p> </a> <ng-container *ngIf="menuItem.children && menuItem.children.length > 0"> <ul class="nav"> <li routerLinkActive="active" *ngFor="let childmenu of menuItem.children" class="{{menuItem.class}} nav-item"> <a class="nav-link" [routerLink]="[childmenu.path]"> <i class="material-icons">{{childmenu.icon}}</i> <p>{{childmenu.title}}</p> </a> </li> </ul> </ng-container> </li> </ul>
pouvez-vous me partager la capture d'écran de votre résultat?
y a-t-il une erreur dans votre console? si vous avez une erreur, partagez-la également.
Pour ce faire, vous pouvez faire ce qui suit.
Ajoutez le CSS suivant à sidebar.component.css
<div class="dropdown-content" aria-labelledby="navbarDropdownMenuLink"> <a href="#">Mike John responded to your email</a> <a href="#">You have 5 new tasks</a> <a href="#">You're now friend with Andrew</a> <a href="#">Another Notification</a> <a href="#">Another One</a> </div>
Modifiez votre
code> drop-down div à ce qui suit
/* Dropdown Content (Hidden by Default) */ .dropdown-content { display: none; position: absolute; margin-left: 12%; background-color: #f1f1f1; width: 200px; box-shadow: 0px 8px 16px 0px rgba(0,0,0,0.2); z-index: 1; padding-bottom:12px; } /* Links inside the dropdown */ .dropdown-content a { color: black; text-decoration: none; display: block; font-size: 8px; } /* Change color of dropdown links on hover */ .dropdown-content a:hover {background-color: #ddd;} /* Show the dropdown menu on hover */ .dropdown:hover .dropdown-content {display: block;}
Stackblitz
Salut, Merci pour votre solution, mais je n'ai vu aucun point de la barre déroulante
J'ai peut-être mal compris, votre exemple de capture d'écran semble être un sous-menu pliable. Pourriez-vous s'il vous plaît clarifier votre exemple de capture d'écran, quel est le comportement exact dont vous avez besoin dans ce sous-menu?
Lorsque vous cliquez sur l'en-tête de notification 5 certaines actions
dans le menu de la barre latérale, ne vouliez-vous pas qu'il se développe dans la barre latérale pour révéler les éléments d'action des enfants?
Bonjour, j'ai vu votre exemple de barre latérale, son option de sous-menu non fournie
Veuillez consulter le stackblitz révisé et la réponse.
Veuillez supprimer tout ce qui se trouve à l'intérieur de la balise ul avec la balise ul et collez mon code
<ul class="nav-item"> <a data-toggle="collapse" href="#collapseExample1" class="collapsed"> <span> Menu <b class="caret"></b> </span> </a> <div class="collapse" id="collapseExample1"> <ul class="nav"> <li class="nav-item"> <a href="javascript:void(0)" class="nav-link"> <span class="sidebar-normal">Sub menu 01</span> </a> </li> <li class="nav-item"> <a href="javascript:void(0)" class="nav-link"> <span class="sidebar-normal">Sub menu 02</span> </a> </li> <li class="nav-item"> <a href="javascript:void(0)" class="nav-link"> <span class="sidebar-normal">Sub menu 03</span> </a> </li> </ul> </div>
Comment créez-vous la barre latérale?
salut @NeryOrtez Je ne suis pas clair, ma barre latérale fonctionne bien. je veux savoir comment ajouter un sous-menu pour la barre latérale
pouvez-vous partager votre composant.html de votre barre latérale
salut @BearNithi j'ai mis à jour ma question