建议快速解决方法,以防止md-menu关闭md-menu-item的点击

时间:2015-12-31 06:02:05

标签: javascript angularjs angular-material

我试图阻止md-menu关闭md-menu-item点击。我通过角度材质menuServiceProvider中的以下修复实现了它。

更改https://github.com/angular/material/blob/master/src/components/menu/js/menuServiceProvider.js中的第286行将允许这样做。

if (!target.hasAttribute('disabled') && !target.hasAttribute('md-menu-disable-close') &&
   (!closestMenu || closestMenu == opts.parent[0])) { close(); }

但寻找替代方法。

4 个答案:

答案 0 :(得分:1)

点击后需要打开菜单,您可以通过点击进行简单的尝试: md-prevent-menu-close =“md-prevent-menu-close”

在角度1.x

<i class="material-icons" 
   ng-click="$ctrl.deleteAlerts(item.MessageNumber)"
   md-prevent-menu-close="md-prevent-menu-close">
   delete
</i>

在角度2.x或角度6

<i class="material-icons" 
       (click)="deleteAlerts(item.MessageNumber)"
       md-prevent-menu-close="md-prevent-menu-close">
       delete
</i>

答案 1 :(得分:0)

我在这个问题上得到了最好的解决方法,因为md-menu组件会查找来自具有这些属性['ng-click','ng-href','ui-sref']的元素的点击,我们可以创建我们自己的ng-click版本,并将其用于md-menu中的任何点击事件,如下所示:

app.directive('myClick', function ($parse, $rootScope) {
return {
    restrict: 'A',
    compile: function ($element, attrs) {
        var fn = $parse(attrs.myClick, null, true);
        return function myClick(scope, element) {
            element.on('click', function (event) {
                var callback = function () {
                    fn(scope, { $event: event });
                };
                scope.$apply(callback);
            })
        }
    }
}
})

...并在html ...

<md-menu>
<md-button>Open Menu</md-button>
<md-menu-content>
    <md-button my-click="doSomething()">Click me without closing the menu</button>
</md-menu-content>
</md-menu>

答案 2 :(得分:0)

有这个属性,您可以添加到md-menu-item元素,由名为md-prevent-menu-close的角度js给出,这将阻止md-menu关闭任何项目的点击。 有关更多详细信息:https://material.angularjs.org/latest/api/directive/mdMenu

谢谢。

答案 3 :(得分:0)

我也遇到了同样的问题 - 单击事件触发时菜单项关闭,我在菜单内容中添加了md-prevent-menu-close =“md-prevent-menu-close”,我使用了ng-click, ui-sref等这个问题已经解决了。

下面的示例代码段
<md-menu>
  <md-button class="md-icon-button">
    <i class="material-icons md-notification-badge" >notifications</i>
  </md-button>
    <md-menu-content class="alert-menu" width="6" >
      <md-menu-item  ng-repeat="item in $ctrl.myAlertsNotifications">
        <div><i class="material-icons">{{item.icon}}</i></div>
        <i class="material-icons" ng-click="$ctrl.deleteAlerts(item.MessageNumber);" md-prevent-menu-close="md-prevent-menu-close">delete</i>
      </md-menu-item>
    </md-menu-content>
  </md-menu>