Angular控制器定义close_window函数后调用报错:close_window未定义
问题原因&解决方案
你遇到的问题核心是作用域不匹配:
你在Angular控制器里把函数定义在了$scope上,这个函数属于Angular的作用域内成员,而HTML里的javascript:close_window()是直接在全局window对象的作用域下去查找close_window函数——全局作用域里根本没有这个函数,自然会报ReferenceError。
正确的解决方式(Angular标准做法)
把HTML里的原生JS调用改成Angular的ng-click指令,它会自动在当前控制器的$scope里查找对应的函数:
<!-- 方式1:用ng-click,同时阻止a标签的默认跳转行为 --> <a href="#" ng-click="close_window(); $event.preventDefault()">Quit</a> <!-- 方式2:更推荐用按钮元素,因为这是操作行为不是跳转链接 --> <button ng-click="close_window()">Quit</button>
你的控制器代码不需要修改,保持原来的定义即可:
$scope.close_window = function() { window.close(); };
额外注意点
现代浏览器对window.close()有严格限制:只有通过window.open()方法打开的窗口,才能用window.close()成功关闭。如果是用户直接打开的标签页,调用这个方法可能会无响应,这是浏览器的安全策略,和Angular无关。
内容的提问来源于stack exchange,提问作者M. Slomski
相关产品推荐
相关产品推荐

