1

I have built a sidebar dropdown menu with toggle of sub-menus. In directive, I use @HostBinding to add 'open' to parent li class, and set css of li.open > ul to display:block to show sub-menus. My question is in Angular2, how to remove 'open'of all other li's class when I add 'open' to one specific parent li. Please see some of code below:

app-directive.ts

import { Directive,HostListener,HostBinding} from '@angular/core';

@Directive({selector: '[appNavToggle]'})

export class NavToggleDirective {
  @HostBinding('class.open') subMenuOpened:boolean;

  @HostListener('click', ['$event'] )
    confirmFirst(event: Event) {
    this.subMenuOpened = !this.subMenuOpened;
  }}

HTML

        <li class="nav-item" appNavToggle>
        <ul class="sub-menu">
            <li class="nav-item">Submenu1</li>
            <li class="nav-item">Submenu2</li>
            <li class="nav-item">Submenu3</li>
        </ul>
       </li>

        <li class="nav-item" appNavToggle>
        <ul class="sub-menu">
            <li class="nav-item">Submenu4</li>
            <li class="nav-item">Submenu5</li>
            <li class="nav-item">Submenu6</li>
        </ul>
       </li>

CSS

li > ul { display: hide; }
li.open > ul { display: block; }
Mistalis
  • 17,793
  • 13
  • 73
  • 97
Sean Deng
  • 11
  • 3
  • http://stackoverflow.com/questions/35712379/angular2-close-dropdown-on-click-outside-is-there-an-easiest-way or http://stackoverflow.com/questions/43941800/angular-2-dart-how-to-detect-click-on-everything-but-element/43943680#43943680 – Günter Zöchbauer May 17 '17 at 08:48

0 Answers0