从Angular表达式访问窗口

tam*_*cun 5 window-object angularjs angularjs-scope

根据开发人员指南,我应该能够从Angular表达式中访问浏览器窗口$window.

与JavaScript不同,其中names默认为全局窗口属性,Angular表达式必须使用$ window来引用全局窗口对象.例如,如果要调用窗口中定义的alert(),则必须在表达式中使用$ window.alert().

但是我似乎无法$window从使用的表达式访问$scope.$eval.以下是我在登录控制台时获得的一些输出:

console.log($window);                   // the Window object as expected
console.log($scope.$eval('$window'));   // undefined
console.log($scope.$eval('1+1'));       // 2
console.log($scope.$eval('scopeVar'));  // 'abc'
Run Code Online (Sandbox Code Playgroud)

控制器具有$window依赖性.我可以从表达式访问范围变量和其他服务但不能$window,因此$scope.$eval($window.alert())也不起作用.

我在这里错过了什么?

Ste*_*wie 7

$scope.$eval评估$scope,因此只有在为范围成员分配$ window服务时,您的评估才会起作用:

$scope.$window = $window;  
console.log($scope.$eval('$window'));
Run Code Online (Sandbox Code Playgroud)

  • 这个答案是正确的,但似乎更新版本的AngularJS(我在1.2.4)不允许出于安全原因从表达式访问窗口对象,你得到这个[错误](http://docs.angularjs .org/error/$ parse:isecwindow?p0 = $ window.alert()如果你试试.好吧,我不能说文档非常一致然后......我只是将警报调用包装在一个控制器函数中并从表达式中使用它. (2认同)