就像标题所说的那样,我不确定为什么$event.preventDefault()
没有阻止右键单击显示上下文菜单。
我已经用this simple example写了一些来证明这个问题。
HTML:
<body ng-controller="MainCtrl">
<div id="me" ng-mousedown="stopContext($event)">CLICK ME {{num}}</div>
</body>
使用Javascript:
$scope.stopContext = function(ev) {
$scope.num += 1;
ev.preventDefault();
};
提前致谢。
答案 0 :(得分:12)
为了阻止上下文菜单,您需要捕获(并阻止) contextmenu
事件。
不幸的是,Angular没有针对此事件的指令,因此您必须自己创建一个。
从Angular的源代码(版本1.2.16)“复制”:
app.directive('myContextmenu', function ($parse) {
return {
compile: function (tElem, tAttrs) {
var fn = $parse(tAttrs.myContextmenu);
return function (scope, elem) {
elem.on('contextmenu', onContextmenu);
function onContextmenu(evt) {
scope.$apply(function () {
fn(scope, {$event: evt});
});
});
};
}
};
});
然后,您可以像这样使用它:
<div id="me" my-contextmenu="stopContext($event)">CLICK ME {{num}}</div>
另请参阅此 short demo 测试了最新版本的Chrome,Firefox和Safari,并找到了工作。