首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >angular2-mdl动态下拉菜单

angular2-mdl动态下拉菜单
EN

Stack Overflow用户
提问于 2016-11-11 07:07:36
回答 1查看 776关注 0票数 2

我正在使用angular2开发一个应用程序。目前,我正试图找出如何使用angular2-mdl制作动态下拉菜单,但我似乎无法找到正确的解决方案。下面是我的项目的代码片段

代码语言:javascript
复制
<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>

它似乎不像我期望的工作方式,在材料设计精巧的菜单页面,当我点击一个菜单,另一个关闭。所发生的是,我可以打开所有下拉菜单,但当我试图关闭一个,他们都关闭。我认为我的问题是<button ... [mdl-toggle-menu]="submenu"><mdl-menu #submenu="mdlMenu" ... >是否有一种方法来动态地为它设置值?

我尝试将值更改为<button ... [mdl-toggle-menu]="link.icon"><mdl-menu #{{link.icon}}="mdlMenu" ... >,但我得到了一个错误。有什么想法吗?

代码语言:javascript
复制
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)

编辑

谢谢你的模板..。下面是柱塞代码http://plnkr.co/edit/R6Bnadu124qOohjUWuMZ?p=preview

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2016-11-14 08:39:43

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

解决办法是:在打开菜单的每个按钮上注册一个单击事件侦听器:

代码语言:javascript
复制
<button mdl-button (click)="hideAllExcept(submenu)" class="mdl-navigation__link" #{{link.name}}="mdlButton"  [mdl-toggle-menu]="submenu">{{link.name}}</button>

在应用程序组件中查询所有menuComponents:

代码语言:javascript
复制
@ViewChildren(MdlMenuComponent) private menuComponents: QueryList<MdlMenuComponent>;

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

代码语言:javascript
复制
  hideAllExcept(submenu) {
   this.menuComponents.forEach( (menu) => {
     if (submenu !== menu) {
       menu.hide();
     }
   });
  }

下面是解决方法的plnkr:http://plnkr.co/edit/Yo7F1HKZSmVU309selTc?p=info

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/40542843

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档