$ window on ng Click指令

时间:2014-06-24 10:13:31

标签: angularjs

为什么这不起作用?

由于角度表达式无法访问window个对象,因此我使用了$window,但以下内容无效。

<button ng-click="$window.alert('Hi There')">Hi There</button>
  

Angular表达式无法访问全局变量   窗口,文档或位置。这种限制是故意的。它   防止意外进入全球国家 - 一个共同的来源   微妙的错误。

2 个答案:

答案 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
}]);