为什么这不起作用?
由于角度表达式无法访问window
个对象,因此我使用了$window
,但以下内容无效。
<button ng-click="$window.alert('Hi There')">Hi There</button>
Angular表达式无法访问全局变量 窗口,文档或位置。这种限制是故意的。它 防止意外进入全球国家 - 一个共同的来源 微妙的错误。
答案 0 :(得分:4)
模板只能访问放在$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);
};
}]);
答案 1 :(得分:2)
您只能通过范围调用控制器中的服务(这是将非UI逻辑与模板分离的想法)
请参阅How to call a service function in AngularJS ng-click (or ng-change, ...)?
$ window是一项服务,与其他与视图无直接关系的服务一样,它们无法在模板中访问。
angular.module('app').controller('Controller',
['$scope', '$window', function($scope, $window) {
$scope.alert=$window.alert
}]);