为什么onclick="window.history.back()"
工作且角度ng-click="window.history.back()"
没有?
答案 0 :(得分:3)
您可以将window
添加到$scope
,或者更好地添加到$rootScope
,这样每个$scope
都可以window
访问$rootScope
尝试按预期工作。
将示例添加到<script>
app.run(['$rootScope', function($rootScope) {
$rootScope.window = window
}])
</script>
:
<button type="button" ng-click="window.history.back()">Go back</button>
然后你打电话:
<button type="button" ng-click="window.alert('it works!')">Alert!</button>
或:
#Worker for load balancing
worker.list=loadbal
worker.loadbal.type=lb
worker.loadbal.balance_workers=worker1,worker2
worker.loadbal.method=R
#worker.loadbal.sticky_session=1
#worker.stat1.type=status
worker.worker1.port=8009
worker.worker1.host=localhost
worker.worker1.redirect=worker2
worker.worker1.type=ajp13
worker.worker2.port=8008
worker.worker2.host=localhost
worker.worker2.redirect=worker1
worker.worker2.type=ajp13
或您想要的全局JavaScript范围内的任何变量或函数。
答案 1 :(得分:2)
因为在模板中使用控制器或指令范围。因此angular期望scope对象具有名为window的属性,而不是在脚本的全局范围内搜索它
答案 2 :(得分:2)
onclick 是一个javascript事件,因此可以在javascript窗口对象中调用函数。
在哪里
ng-click 是一个angular指令,它只能调用$ scope中可用的函数。窗口在$ scope中不可用。
答案 3 :(得分:1)
onclick="window.history.back()"
有效,因为它是vanilla JavaScript而onclick是元素上的一个事件。
ng-click="window.history.back()"
不起作用,因为ng-click是一个角度指令,而angular正在控制器的范围内寻找一个名为window的对象。
您可以以角度获取对窗口对象的访问权限,建议的方法是声明对$ window服务的依赖关系并执行$ window对象所需的任何操作。
使用$ window服务的原因:当使用$ window服务而不是全局窗口对象时,它有助于进行单元测试。
编辑:以下来自Pro AngularJS书籍的信息 - 第19章
为什么以及何时使用全局对象服务
AngularJS包含这些服务的主要原因是使测试更容易。我在第25章进入测试,但是 单元测试的一个重要方面是需要隔离一小段代码并测试其行为而不进行测试 它本质上依赖的组件,创建一个集中的测试。 DOM API通过全局公开功能 文档和窗口等对象。这些对象使得很难在不进行测试的情况下隔离单元测试的代码 浏览器实现其全局对象的方式。使用诸如$ document之类的服务允许使用AngularJS代码 在没有直接使用DOM API全局对象的情况下编写,并允许使用AngularJS测试服务 配置特定的测试场景。
答案 4 :(得分:0)
onclick是一个js事件,因此可以在javascript窗口对象中调用函数。
但是 ng-click是一个angular指令,它只能调用$ scope中可用的函数。窗口在$ scope中不可用。在angularjs中,我们可以通过以下方式实现:
纳克单击=&#34; doTheBack()&#34;
$ scope.doTheBack = function(){
window.onbeforeunload = function(e) {
var msg = 'test';
e.returnValue = msg;
return msg;
};
};