javascript - 将右键单击与 Angular Material 绑定(bind)

标签 javascript angularjs angularjs-directive material-design angular-material

我正在使用 Angular Material 。

我想创建一个指令,允许我绑定(bind)右键单击元素。

我尝试过这个:

JS:

app.directive('rightClick', ["$parse", function($parse) {
    return {
        restrict: 'A',
        link: function($scope, element, attrs) {
            var fn = $parse(attrs.rightClick);
            element.bind('contextmenu', function(event) {
                $scope.$apply(function() {
                    event.preventDefault();
                    fn($scope, {$event:event});
                });
            });
        }
    }
}])

HTML:

<md-menu md-position-mode="target-right bottom">
<md-button right-click="$mdOpenMenu($event)" aria-label="Open some menu">
    Right click
</md-button>
<md-menu-content>
    <md-menu-item>
        <md-button ng-click="doSomething()" aria-label="Do something">
            Action
        </md-button>
    </md-menu-item>
</md-menu-content>

问题是菜单没有出现在合适的位置。

事实上,该位置位于页面的左上角,而不是我单击的元素上。

如何创建一个指令来执行与 ng-click 完全相同的操作,但通过右键单击并允许我使用 Angular Material 方法?

更新:

感谢您的回答 Catmandu。

我已经创建了一个类似的指令,但它仍然不起作用。

这是我的问题的说明:

带有绑定(bind)上下文菜单的自定义“ng-right-click”指令的结果:

ng-right-click result

AngularJS“ng-click”指令的结果:

ng-click result

在我的自定义指令中,菜单没有出现在合适的顶部/左侧位置。

最佳答案

您可以使用指令来绑定(bind)右键单击时的特定操作,使用 contextmenu 事件:

app.directive('ngRightClick', function($parse) {
    return function(scope, element, attrs) {
        var fn = $parse(attrs.ngRightClick);
        element.bind('contextmenu', function(event) {
            scope.$apply(function() {
                event.preventDefault();
                fn(scope, {$event:event});
            });
        });
    };
});

使用直接返回函数并避免使用restrict

关于javascript - 将右键单击与 Angular Material 绑定(bind),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36007578/

相关文章:

javascript - 函数组合的类型系统

javascript - Magento 您的结帐进度面板不会预填充信息

jquery - 如何在 AngularJS 中监听 jQuery 事件

javascript - 如何使用 $routeProvider 在 Angular 中更改页面标题

angularjs - 当插入指令属性时,如何避免启动时的竞争条件?

javascript - 在 jQuery 中使用添加的类时出现问题

javascript - 声明一个 javascript 对象。然后使用 jQuery 和 Ajax 设置属性

javascript - Mean.js 多种布局,服务器或 Angular 布局

javascript - 双向数据绑定(bind)不适用于 Angular.js 中的指令

jquery - 使用 jQuery 按类选择 Angular JS 指令中 ng-repeat 创建的元素?