就像标题所说,我不确定为什么$event.preventDefault()不会阻止右键单击出现上下文菜单.
我用plunker写了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(); };
提前致谢.
解决方法
为了防止上下文菜单,您需要捕获(并阻止)
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,并找到了工作.