html - Angular 自定义指令 css 折叠子菜单

标签 html css angular typescript twitter-bootstrap-3

我正在关注这篇文章 https://medium.com/@alok.lko631/submenu-or-dropdown-menu-without-jquery-in-angular-2-4-5-6-using-only-bootstrap-and-custom-fd716db511be 用于折叠菜单和子菜单。我能够实现逻辑,但我面临的问题是我有多个菜单并单击另一个菜单(已经打开的菜单没有折叠)并且每当我单击子菜单的任何值时主菜单正在崩溃而不是路由..

Stackblitz 演示 https://stackblitz.com/edit/angular-y3ud5q

submenu.component.html

<aside class="main-sidebar">
    <section class="sidebar">
        <ul class="sidebar-menu tree" data-widget="tree">
            <li checkToggle *ngFor="let data of listsvalue ">
                <a>
                    <span>{{data.value}}</span>
                    <span class="pull-right-container">
                        <i class="fa fa-angle-left pull-right"></i>
                    </span>
                </a>
                <ul class="nav submenu" data-widget="tree">
                    <li *ngFor="let test of data.value ">
                        <a>
                            <span>{{test.value}}</span>
                            <span class="pull-right-container">
                                <i class="fa fa-angle-left pull-right"></i>
                            </span>
                        </a>
                    </li>
                </ul>
            </li>
        </ul>
    </section>
</aside>

submenu.directive.ts

@Directive({
  selector: '[checkToggle]'
})
export class SidebarLeftToggleDirective {
  @Input('checkToggle') partner;

  /**
  * @method constructor
  * @param elementRef [description]
  */
  constructor(public elementRef: ElementRef) { }

  @HostBinding("class.active") isOpen = false;
  @HostListener("click") toggleOpen($event) {
    this.isOpen = !this.isOpen;
  }
}

submenu.component.cs

.submenu li {
    padding-left:15px;
}

ul li .submenu {
    display: none;
}

ul li.active .submenu {
    display: block;
    list-style: none;
}

最佳答案

使用内联语句和类属性的解决方案比指令中的 Hostbinding 更容易,因为它只允许跟踪一行。

您只需要跟踪一个将保存当前打开的 li 索引的属性,然后将仅在该条件下分配类“active”:

<li [class.active]="opened==i" *ngFor="let innerData of partner.value | keyvalue;let i=index" (click)="opened=opened==i?-1:i">

这样,只要有点击,属性的评估就会在类之间切换,并使“li”打开或折叠

Demo

关于html - Angular 自定义指令 css 折叠子菜单,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57112887/

相关文章:

javascript - SoundCloud 和 Vimeo 在不同的选项卡中同步其播放器(有时也同步选项卡和嵌入式播放器)

html - 在另一个动画之后开始动画 (CSS/HTML)

html - CSS:为什么 "margin-left"和 "width"不工作?

angular - 流式 RTSP(AspNet 5 API、FFMPEG、Angular 10、videoJs)

jquery - 使用 PrimeNG 日历检测 [(ngmodel) 对所选日期的更改

html - 溢出换行未应用于文本

javascript - 如何在 Chrome 或 Firefox 浏览器上运行 javascript

javascript - html5 相机 APi 不工作,屏幕上显示带有相机禁令标志的灰色框?

javascript - 如何直接输入按钮?

javascript - 如何更改此脚本中的文本颜色?