angularjs:如何调用没有范围的函数?

时间:2014-08-12 18:20:27

标签: angularjs

这是我的模特

<html ng-app="myApp">
    <button id="rainBtn" ng-click="makeItRain()">Make it rain !  </button>      
    <div class="tab-pane active" id="lobbyTab" ng-controller="chatController"></div>

这是我的myApp.js

var myApp = angular.module('myApp',[]);
makeItRain = function() {
    alert("ok");
}

永远不会调用makeItRain:

如何调用makeItRain()函数?

2 个答案:

答案 0 :(得分:3)

制作一个控制器

var myApp = angular.module('myApp',[]);

myApp.controller("sky", ["$scope", function($scope) {
    $scope.makeItRain = function() {
       alert("ok");
    }
}]);

设置控制器

<button id="rainBtn" ng-controller="sky" ng-click="makeItRain()">

答案 1 :(得分:1)

您无法将全局函数的引用作为角度表达式获取。在不使用控制器的情况下执行此操作的一种可能方法是使用$rootScope并在.run()阶段附加函数,但不建议这样做:

myApp.run(function($rootScope) {

  $rootScope.makeItRain = function() {
     alert('Raining!');
  };

});

另一种方法是放弃通过ng-click指令附加事件处理程序的想法,只需创建一个指令。此解决方案假定您尝试附加的事件处理程序将执行dom操作。

myApp.directive('makeItRain', function() {
  return function(scope, elem, attr) {
    elem.on('click', function() {
      makeItRain();
    });
  };
});

然后将其附加到HTML中:

<button id="rainBtn" make-it-rain>Make it rain !  </button>