根据开发人员指南,我应该能够使用$window
从Angular表达式内部访问浏览器窗口。
与JavaScript不同,在JavaScript中,名称默认为全局窗口属性,Angular表达式必须使用$window来引用全局窗口对象。例如,若要调用在window上定义的alert(),则在表达式中必须使用$window.art().
但是,我似乎无法从用$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())
也不起作用。
我在这里错过了什么?
$scope.$eval
根据$scope
进行评估,因此只有将$window服务分配给作用域成员时,您的评估才会起作用:
$scope.$window = $window;
console.log($scope.$eval('$window'));