【问题标题】:Injecting $mdMenu into scope. Cannot read property open() of undefined将 $mdMenu 注入作用域。无法读取未定义的属性 open()
【发布时间】:2017-06-21 20:45:35
【问题描述】:

我正在尝试让 Angular Material Design 菜单工作,但我似乎无法使用应该由 ng-click 注入的 $mdMenu。

我的 HTML 标记:

<div layout="column" layout-fill ng-controller="AuthControl">
    <md-toolbar ng-controller="navigationControl">
        <div ng-controller="menu as ctrl">
          <md-menu>
             <md-button class="md-icon-button" ng-click="ctrl.open($mdMenu, $event)">
               <md-icon>menu</md-icon>
             </md-button>
             <md-menu-content width="4">
                <md-menu-item>
                   <md-button>
                       <md-icon>account_circle</md-icon>
                   </md-button>
                </md-menu-item>
             </md-menu-content>
         </md-menu>
      </div>
   </md-toolbar>
</div>

角度控制器:

controllers.controller('menu', function menuControl($mdDialog) {
   var originatorEv;

   this.open = function($mdMenu, ev) {
     originatorEv = ev;
     $mdMenu.open(ev);
   };
});

控制器被正确注入,但是当我运行时出现错误

TypeError: Cannot read property 'open' of undefined

有人知道如何解决这个问题吗? 谢谢

【问题讨论】:

    标签: javascript angularjs angular-material


    【解决方案1】:

    不是 mdMenu,而是通过 mdOpenMenu

      <md-button aria-label="menu" class="md-fab md-mini md-primary" ng-click="ctrl.openMenu($mdOpenMenu, $event)">
    

    控制器:

     this.openMenu = function($mdOpenMenu, ev)     {
          originatorEv = ev;
          $mdOpenMenu(ev);
        };
    

    DEMO

    【讨论】:

    • 工作就像一个魅力 thx。您知道为什么这样做有效而文档中提供的示例无效吗? $mdMenu 怎么没有定义?
    • 我敢打赌它已经改变了,演示仍然使用旧版本的角度材料。
    • $mdOpenMenu 已弃用,如另一个答案中所述。
    【解决方案2】:

    "$mdOpenMenu" has been replaced by "$mdMenu.open" 现已弃用。使用最新版本的 Angular Material 就可以了。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2023-02-16
      • 2016-10-05
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-11-17
      • 1970-01-01
      • 2020-04-06
      相关资源
      最近更新 更多