В основном у вас есть два варианта: либо определить его как службу, либо поместить в корневую область. Я бы посоветовал вам сделать из этого сервис, чтобы не загрязнять корневую область. Вы создаете сервис и делаете его доступным в вашем контроллере следующим образом:
<!doctype html>
<html ng-app="myApp">
<head>
<script src="http://code.jquery.com/jquery-1.9.1.min.js"></script>
<script src="http://code.angularjs.org/1.1.2/angular.min.js"></script>
<script type="text/javascript">
var myApp = angular.module('myApp', []);
myApp.factory('myService', function() {
return {
foo: function() {
alert("I'm foo!");
}
};
});
myApp.controller('MainCtrl', ['$scope', 'myService', function($scope, myService) {
$scope.callFoo = function() {
myService.foo();
}
}]);
</script>
</head>
<body ng-controller="MainCtrl">
<button ng-click="callFoo()">Call foo</button>
</body>
</html>
Если это не вариант для вас, вы можете добавить его в корневую область следующим образом:
<!doctype html>
<html ng-app="myApp">
<head>
<script src="http://code.jquery.com/jquery-1.9.1.min.js"></script>
<script src="http://code.angularjs.org/1.1.2/angular.min.js"></script>
<script type="text/javascript">
var myApp = angular.module('myApp', []);
myApp.run(function($rootScope) {
$rootScope.globalFoo = function() {
alert("I'm global foo!");
};
});
myApp.controller('MainCtrl', ['$scope', function($scope){
}]);
</script>
</head>
<body ng-controller="MainCtrl">
<button ng-click="globalFoo()">Call global foo</button>
</body>
</html>
Таким образом, все ваши шаблоны могут вызывать globalFoo()
без необходимости передавать его в шаблон из контроллера.
module.value('myFunc', function(a){return a;});
и затем внедрить его по имени в ваши контроллеры. (Если кто-то хочет избежать предоставления услуги)