Edit in JSFiddle

var myApp = angular.module("myApp", []);

myApp.controller("MainCtrl", ["$scope", function ($scope) {
    console.log("Main Controller loaded.");
    $scope.isVisible = false;
    $scope.$watch('isVisible', function (a) {
        console.log(a);
    })
}]);

myApp.directive("ngContextmenu", function () {
    contextMenu = {};
    contextMenu.restrict = "AE";
    contextMenu.scope = {
        "isVisible": "="
    };
    contextMenu.link = function (lScope, lElem, lAttr) {

        lElem.on("contextmenu", function (e) {
            e.preventDefault();
            console.log("Element right clicked.");
            lScope.$apply(function () {
                lScope.$parent.isVisible = true;
            });

        });
        lElem.on("mouseleave", function (e) {
            console.log("Leaved the div");
            lScope.$apply(function () {
                lScope.$parent.isVisible = false;
            });
        });
    };
    return contextMenu;
});
<div ng-controller="MainCtrl">
    <div ng-contextmenu>Right Click On the Item!
        <ul id="contextmenu-node" ng-show="isVisible">
            <li>Item 1</li>
            <li>Item 2</li>
        </ul>
    </div>
</div>
#contextmenu-node {
    position: absolute;
}

External resources loaded into this fiddle: