2014-01-08 44 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 –