2014-01-08 45 views
4

根据developer guide我应该能够从$window的角度表达式访问浏览器窗口。从角度表达式访问窗口

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

但是我似乎无法从$scope.$eval评估的表达式中访问$window。 下面是一些输出登录到控制台时,我得到:

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' 

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

我在这里错过了什么?

回答

6

$scope.$eval评估对$scope,因此,如果您分配$窗口服务范围成员的评价只会工作:

$scope.$window = $window; 
console.log($scope.$eval('$window')); 
+2

这个答案是正确的,但似乎AngularJS的新版本(我是1.2 .4)由于安全原因不允许从表达式访问窗口对象,并且你得到这个[error](http://docs.angularjs.org/error/$parse:isecwindow?p0=$window.alert()如果你尝试的话,那么我不能说文档是非常一致的......然后我将这个警报调用包装在一个控制器函数中,并使用表达式。 – tamacun

+0

You are right @tamacun –