我试图在我的指令中听取$mdMenuOpen
事件。
.directive('mdPreventFocus', function () {
return {
restrict: 'A',
link: function (scope, element, attrs, $mdOpenMenu) {
element.on('click', function () {
console.log(scope);
scope.$on('$mdMenuOpen', function(ev, element) {
console.log('open');
});
})
}
}
})
<md-menu md-position-mode="target-right target" md-offset="0 42">
<md-button class="md-icon-button rounded dtp-btn-ok" ng-click="$mdMenu.open($event);" md-prevent-focus>
<i class="material-icons">more_horiz</i>
</md-button>
<md-menu-content class="person-popup contact-popup">
<md-card md-theme-watch>
<md-card-title>
<md-card-title-text>
<span class="md-headline">Headline</span>
<span class="md-subhead">Subhead informatie</span>
</md-card-title-text>
</md-card-title>
<md-card-actions layout="row" layout-align="end center">
<md-button title="Title informatie" class="md-icon-button icon-margin">
<i class="material-icons">phone</i>
</md-button>
<md-button title="Title informatie" class="md-icon-button icon-margin">
<i class="material-icons">email</i>
</md-button>
<md-button title="Title informatie" class="md-icon-button icon-margin">
<i class="material-icons" >forward</i>
</md-button>
</md-card-actions>
</md-card>
</md-menu-content>
</md-menu>
当我点击md按钮时,我看到了console.log(scope)
输出,但scope.$on
没有做任何事情。
如果我检查控制台中的scope
,我会看到$mdOpenMenu: ƒ
此外,我可以记录返回值的scope.$id
,但如果我记录scope.$mdMenuIsOpen
,我会得到一个未定义的。这意味着mdMenu没有打开,否则就是真的。但在我的用户界面中,菜单已打开。
为什么scope.$on
无法正常工作?
//编辑//
似乎只有我第一次打开菜单scope.on('$mdMenuOpen')
才能正常工作。如果我再次打开菜单,我会看到console.log消息。
//编辑2 //
我在Codepen https://codepen.io/anon/pen/LmQNzv上复制了我的代码,它似乎确实按预期工作。所以我要看看代码中的问题是什么。