【问题标题】:Angular custome dirictive css collapse sub menuAngular 自定义指令 css 折叠子菜单
【发布时间】:2019-07-20 21:38:08
【问题描述】:

我正在关注这篇文章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;
}

【问题讨论】:

  • 这里是 stackbiltz 演示 stackblitz.com/edit/angular-y3ud5q。我不确定我的方法是否正确。我有一个要求,我需要一个菜单​​和子菜单,并且菜单应该在点击时折叠
  • 是的..而且当我们点击子菜单时..它不应该折叠..子菜单值有一个路由链接,它将路由 onclick..
  • @Vega 好运吗?
  • 是的..但是当我们在显示子菜单后单击相同的菜单时..菜单没有折叠...

标签: html css angular typescript twitter-bootstrap-3


【解决方案1】:

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

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

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

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

Demo

【讨论】:

  • 是的,它现在正在堆栈 blizt 中工作..请您也帮忙....如果我想显示我的菜单和子菜单,像这样 "Sub Test": { "Example1": " hai", "Ex2": "hello" },我需要对现有演示做哪些更改
猜你喜欢
  • 1970-01-01
  • 2015-05-29
  • 2012-12-16
  • 1970-01-01
  • 2023-01-19
  • 2012-12-28
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多