2014-01-08 5 views
4

В соответствии с developer guide я должен иметь доступ к окну браузера изнутри Угловые выражения с $window.Доступ к окну из углового выражения

В отличие от JavaScript, где имена по умолчанию являются глобальными свойствами окна, Угловые выражения должны использовать $ 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' 

Контроллер имеет $window как зависимость. Я могу получить доступ к переменным области видимости и другим службам из выражений, но не $window, поэтому $scope.$eval($window.alert()) тоже не работает.

Что мне здесь не хватает?

ответ

6

$scope.$eval оценивает против $scope, так что ваша оценка будет работать только если вы назначаете услуги $ окна члену Область применения:

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

Этот ответ является правильным, но это, кажется, более новые версии AngularJS (я на 1,2 .4) не позволяет получить доступ к объекту окна из выражений из-за соображений безопасности, и вы получите эту [ошибку] ​​(http://docs.angularjs.org/error/$parse:isecwindow?p0=$window.alert() если вы попытаетесь. Я не могу сказать, что документация очень последовательна, тогда ... Я просто завершу вызов предупреждения в функцию контроллера и использую это из выражений. – tamacun

+0

Вы правы @tamacun –

Смежные вопросы