Vous avez deux possibilités : soit vous le définissez comme un service, soit vous le placez sur votre Root Scope. Je vous suggère d'en faire un service pour éviter de polluer le Root scope. Vous créez un service et le rendez disponible dans votre contrôleur comme ceci :
<!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>
Si ce n'est pas une option pour vous, vous pouvez l'ajouter à la portée Root comme ceci :
<!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>
De cette façon, tous vos modèles peuvent appeler globalFoo()
sans avoir à le passer au modèle depuis le contrôleur.
0 votes
Je ne suis pas sûr à 100%, mais il y a une chance que vous puissiez aussi le définir sur votre module comme ceci :
module.value('myFunc', function(a){return a;});
et ensuite l'injecter par son nom dans vos contrôleurs. (Si l'on veut éviter de faire un service)0 votes
Ce qui signifie que je dois l'ajouter manuellement à chaque contrôleur. $rootScope est la solution pour ce que je voulais faire il y a presque 2 ans =)
0 votes
OK. :) C'est juste que j'utilise plus souvent des directives avec une portée isolée que des contrôleurs simples et je dois tout injecter de toute façon. J'aime le style de code modulaire que cela procure. De plus, vous n'avez pas à vous occuper des scopes parents et vous n'avez pas à chercher d'où viennent les variables de votre scope :)