如何在AngularJs中关闭自定义上下文菜单?

时间:2017-03-07 23:15:49

标签: javascript jquery angularjs contextmenu

我在AngularJs中制作了自定义contextmenu指令。现在它应该在我点击自定义菜单以外的任何地方时关闭。我将单击功能绑定到关闭菜单的文档,但对于页面上有其上有点击事件的其他元素,已停止工作,只有文档点击功能正常工作。我该如何解决这个问题? 我的角色代码:

app.directive('preventRightClick', function() {
return {
    restrict: 'A',
    scope: {
        visible: '='
    },
    link: function($scope, $ele) {
        $ele.on('contextmenu', '*', function(e) {
            e.preventDefault();
            $scope.$apply(function () {
                $scope.visible = true;
                // console.log(e.pageX, e.pageY)
                $('.parented').css({left:e.pageX, top:e.pageY})
            })
        });

        $(document).on('click', '*', function (e) {
            if ($(e.target).parents('.parented').length  > 0) {
                // console.log('yes, its parent');
                // console.log($(e.target))
                console.log('Within parent clicked')
            }
            else{
                $scope.$apply(function () {
                    $scope.visible = false;
                })
                console.log('Outside parent clicked')
            }
        })              
}
};
})

我的HTML:

<div ng-if="isVisible" class="parented" style="display: inline-block;">
                    <div class="btn-group-vertical notclick" role="group" aria-label="Vertical button group"> 
                        <button type="button" class="btn btn-default">Button</button> 
                        <button type="button" class="btn btn-default">Button</button> 
</div>
</div>

1 个答案:

答案 0 :(得分:1)

尝试使用angular-click-outside插件 https://github.com/IamAdamJowett/angular-click-outside 它易于使用,只需使用它: <div class="menu" click-outside="closeThis()"></div>