2014-05-11 11 views
6

Come dice il titolo, non sono sicuro del perché $event.preventDefault() non impedisca la visualizzazione del menu di scelta rapida con il tasto destro del mouse.

Ho scritto this simple example nel plunker per dimostrare il problema.

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(); 
    }; 

Grazie in anticipo.

+0

menu di scelta rapida non visualizzato sul caminetto – Grundy

risposta

12

Per impedire il menu di scelta rapida è necessario acquisire (e impedire) l'evento contextmenu.

Sfortunatamente, Angular non ha una direttiva per questo evento, quindi dovrai crearne uno tu stesso.

"Copia" dal codice sorgente di angolare (versione 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}); 
      }); 
     }); 
     }; 
    } 
    }; 
}); 

Quindi, è possibile utilizzare in questo modo:

<div id="me" my-contextmenu="stopContext($event)">CLICK ME {{num}}</div> 

See, anche, questo short demo.
Testato sull'ultima versione di Chrome, Firefox e Safari e trovato funzionante.

+0

Bella spiegazione. upvoted –

Problemi correlati