Where to put user defined functions in Angular JS?
One way is to create a service with the functions you want to share across multiple controllers. See this post for more info.
After you do so you can inject the service you created into any controller and access the say()
function with code something like this:
function TestCtrl($scope, myService){
$scope.say = myService.say;
}
Where you defined myService
as:
angular.module('myApp', [])
.factory('myService', function () {
return {
say: function () {
return "Hello World";
}
}
});
Here is a jsFiddle with an example.
Kyle Macey
I'm a Ruby developer and GitHubber in Upstate New York.
Updated on August 22, 2020Comments
-
Kyle Macey over 3 years
In my view, I want to render:
<p> {{ say() }} </p>
Where
say
is defined as such:say = function() { return "Hello World"; }
I can define it in my controller:
function TestCtrl($scope) { $scope.say = function() { ... }; }
But then it's only accessible within that controller.
If I define the function outside the Angular file structure, it renders nothing. Same if I define it in my
controllers.js
file, but outside a controller function scope.Where is the proper place to put my function, so I can render it in any controller?
-
Kyle Macey over 11 yearsAwesome... I was expecting it to be in with the services, but couldn't find the syntax to add it in
-
Mark Rajcok over 11 yearsJust FYI, an alternate syntax (I prefer seeing/reading 'service' instead of 'factory' if I only need a constructor function): .service('myService', function () { this.say = function () { return "Hello World"; } });
-
Spock almost 10 yearsThe "problem" with a proper service is that each time you use the service, you get a new instance of that service. In this case it might not be the best idea.
-
Evan Hu over 9 years@Spock Yes, so maybe angular should add something like 'singleton bean'.