爲什麼這不起作用?
由於角度表達式無法訪問window
對象,因此我使用了$window
,但以下操作不起作用。
<button ng-click="$window.alert('Hi There')">Hi There</button>
角度表述沒有獲得像 窗口,文檔或位置的全局變量。這個限制是有意的。它可以防止意外進入全球的狀態 - 一個常見的來源 微妙的錯誤。
爲什麼這不起作用?
由於角度表達式無法訪問window
對象,因此我使用了$window
,但以下操作不起作用。
<button ng-click="$window.alert('Hi There')">Hi There</button>
角度表述沒有獲得像 窗口,文檔或位置的全局變量。這個限制是有意的。它可以防止意外進入全球的狀態 - 一個常見的來源 微妙的錯誤。
您只能通過範圍調用你的控制器服務(這是分離的模板非UI邏輯的想法)
見How to call a service function in AngularJS ng-click (or ng-change, ...)?
$窗口是一種服務,而像其他不直接與視圖相關的服務,它們在模板中不可訪問。
angular.module('app').controller('Controller',
['$scope', '$window', function($scope, $window) {
$scope.alert=$window.alert
}]);
模板只能訪問放在其$scope
上的變量。如果您需要使用模板訪問$window
上的任何內容,則需要將$window
注入控制器,並將其分配給$scope
。
例如
angular.module('app').controller('Controller',
['$scope', '$window', function($scope, $window) {
$scope.$window = $window;
}]);
正如評論指出的那樣,你可能不希望整個$window
包裝暴露在你的模板,以便更好的方法是使用一個輔助功能上$scope
。
ng-click="greet('Hi There')"
angular.module('app').controller('Controller',
['$scope', '$window', function($scope, $window) {
$scope.greet = function(message) {
$window.alert(message);
};
}]);
這工作,而是把整個服務到$範圍不推薦使用。請參閱http://stackoverflow.com/questions/20054028/how-to-call-a-service-function-in-angularjs-ng-click-or-ng-change瞭解更多 – edi9999
您100%正確。我認爲他只是在做這個工作來玩弄框架,而不打算在生產代碼中使用它。我可以輕易承擔太多,我應該提到這不是一個好主意。我會在那裏編輯它。 – ivarni