【问题标题】:angular2-mdl dynamic drop-down menuangular2-mdl 动态下拉菜单
【发布时间】:2017-03-25 09:08:27
【问题描述】:

我正在使用 angular2 开发一个应用程序。目前我正在尝试找出如何使用 angular2-mdl 制作动态下拉菜单,但我似乎找不到正确的解决方案。这是我项目中的代码 sn-p

<nav class="mdl-navigation mdl-layout--large-screen-only">

  <ng-container *ngFor="let link of links; let i = index">

    <ng-container *ngIf="!link.hasSubLinks()">

      <button mdl-button class="mdl-navigation__link" (click)="route(link.url)" [routerLink]="link.url" routerLinkActive="active">
        {{link.name}}
      </button>

    </ng-container>

    <ng-container *ngIf="link.hasSubLinks()">

      <button mdl-button class="mdl-navigation__link" #{{link.name}}="mdlButton" [mdl-toggle-menu]="submenu">
        {{link.name}}
      </button>

      <mdl-menu #submenu="mdlMenu" mdl-menu-position="bottom-right" class="mdl-color--blue-grey-800">

        <mdl-menu-item *ngFor="let subLink of link.subLinks">
          <a class="mdl-navigation__link" [routerLink]="subLink.url" routerLinkActive="active">

        <mdl-icon mdl-list-item-icon [mdl-badge]="subLink.badge>0?subLink.badge:null" mdl-badge-overlap role="presentation" class="colorwhite">{{subLink.icon}}</mdl-icon>{{subLink.name}}

          </a>

        </mdl-menu-item>

      </mdl-menu>

    </ng-container>

  </ng-container>

</nav>

它似乎不像我期望的那样在关于menu 的材料设计精简版页面中工作,当我单击一个菜单时,另一个菜单会关闭。发生的情况是我可以打开所有下拉菜单,但是当我尝试关闭一个时,它们都关闭了。我认为我的问题是&lt;button ... [mdl-toggle-menu]="submenu"&gt;&lt;mdl-menu #submenu="mdlMenu" ... &gt; 有没有办法动态设置它的值?

我尝试将值更改为&lt;button ... [mdl-toggle-menu]="link.icon"&gt;&lt;mdl-menu #{{link.icon}}="mdlMenu" ... &gt;,但出现错误。有什么想法吗?

error_handler.js:54 TypeError: this.menu.toggle is not a function
at MdlToggleMenuDirective.onClick (mdl-toggle-menu.directive.js:11)
at _View_AppComponent3._handle_click_2_2 (component.ngfactory.js:1162)
at view.js:375
at dom_renderer.js:262
at dom_events.js:30
at ZoneDelegate.invoke (zone.js:232)
at Object.onInvoke (ng_zone.js:238)
at ZoneDelegate.invoke (zone.js:231)
at Zone.runGuarded (zone.js:128)
at NgZone.runGuarded (ng_zone.js:133)

编辑

感谢模板...这是 plunker 代码http://plnkr.co/edit/R6Bnadu124qOohjUWuMZ?p=preview

【问题讨论】:

标签: angular angular2-mdl


【解决方案1】:

你做的一切都是对的。 angular2-mdl 中有一个错误:如果打开另一个菜单(刚刚创建:https://github.com/mseemann/angular2-mdl/issues/200),则不会关闭打开的菜单。

解决此问题之前的解决方法: 在每个打开菜单的按钮上注册一个点击事件监听器:

<button mdl-button (click)="hideAllExcept(submenu)" class="mdl-navigation__link" #{{link.name}}="mdlButton"  [mdl-toggle-menu]="submenu">{{link.name}}</button>

在您的应用组件中查询所有 menuComponents:

@ViewChildren(MdlMenuComponent) private menuComponents: QueryList<MdlMenuComponent>;

并隐藏除将要打开的菜单之外的所有菜单:

  hideAllExcept(submenu) {
   this.menuComponents.forEach( (menu) => {
     if (submenu !== menu) {
       menu.hide();
     }
   });
  }

这是一个带有解决方法的 plnkr:http://plnkr.co/edit/Yo7F1HKZSmVU309selTc?p=info

【讨论】:

  • 自 2.4.4 版起不再需要此解决方法。
  • 啊,我明白了,看来我只需要更新我的版本。我这样做时使用的是 2.3.1。
猜你喜欢
  • 1970-01-01
  • 2013-11-05
  • 2018-09-29
  • 2012-08-29
  • 2014-06-16
  • 1970-01-01
相关资源
最近更新 更多