Javascript AngularJS试图在单击外部区域时隐藏弹出菜单

Javascript AngularJS试图在单击外部区域时隐藏弹出菜单,javascript,jquery,angularjs,Javascript,Jquery,Angularjs,我通过以下方式设置HTML: <div> <a href="" ng-click="$scope.show_menu = !$scope.show_menu">Options</a> <div class="options_box" ng-show="$scope.show_menu"> <button>Option1</button> ... </div>

我通过以下方式设置HTML:

<div>
    <a href="" ng-click="$scope.show_menu = !$scope.show_menu">Options</a>

    <div class="options_box" ng-show="$scope.show_menu">
        <button>Option1</button>
        ...
    </div>
</div>
加载页面时,我收到以下错误:

Cannot set property 'onclick' of undefined

如果删除我的
$窗口。单击
代码位,错误将消失,单击
选项
按钮将成功打开/关闭选项弹出窗口。当单击弹出菜单外的任何区域时,确保菜单隐藏的正确方法是什么?

您需要像这样
$window

myApp.controller('myController', 
    ['$scope', '$http', '$routeParams', '$window', function($scope, $http, $routeParams, $window) {

    $scope.show_menu = false;
    $scope.$window.onclick = function(){
        $scope.show_menu = false;
        $scope.apply();
    };

    ...

} ]);

$window
不是作用域上的属性。表示
$window
是全局对象。Vaidik在将
$window
放入控制器的方法中是正确的,因此您可以编写
$window.onclick…
而不是
$scope.$window

我不确定这是你需要的答案。我想问一下,如果你点击菜单外的一个按钮,它是否会起作用,因为这个按钮会处理点击事件,防止事件冒泡(传播)到窗口

如果您必须单击以隐藏菜单,那么您可以通过切换
ng show
,单击打开菜单的同一按钮

或者,当菜单失去焦点时,也就是说,鼠标移动到菜单区域之外时,菜单可以直接隐藏-通过向菜单元素添加
ng blur
指令


请参阅。

尝试将$window注入控制器,只需使用$window.onclick。将
$window
注入控制器,并在不添加
$scope
的情况下使用它解决了我的原始错误。但现在我得到了一个
未捕获类型错误:未定义不是单击窗口时出现的函数错误。这似乎是一个相关的问题,我认为它可能会为您提供一个解决新错误的线索,但它也暗示了您可能遇到的下一个问题,即您更改发生在摘要周期和方法之外当你思考时,事情不会隐藏起来。当鼠标在菜单外时,你的点击链接“打开/关闭”起作用,我很想让ng blur尝试关闭。但是我注意到angularjs网站没有这样做。谢谢,相关的问题很有帮助!
myApp.controller('myController', 
    ['$scope', '$http', '$routeParams', '$window', function($scope, $http, $routeParams, $window) {

    $scope.show_menu = false;
    $scope.$window.onclick = function(){
        $scope.show_menu = false;
        $scope.apply();
    };

    ...

} ]);