将 $mdMenu 注入作用域。无法读取未定义的属性 open()
Posted
技术标签:
【中文标题】将 $mdMenu 注入作用域。无法读取未定义的属性 open()【英文标题】:Injecting $mdMenu into scope. Cannot read property open() of undefined 【发布时间】: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 >
<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
有人知道如何解决这个问题吗? 谢谢
【问题讨论】:
【参考方案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 就可以了。
【讨论】:
以上是关于将 $mdMenu 注入作用域。无法读取未定义的属性 open()的主要内容,如果未能解决你的问题,请参考以下文章
React Navigation - 即使安装并链接了手势处理程序,“无法读取未定义的属性‘状态’”
TypeError:无法读取未定义的属性“获取”(修复冲突导入不起作用)
我的 Apollo 服务器的订阅不起作用:无法读取未定义的属性“标题”