Search code examples
javascriptangularjswebangularjs-service

Creating common controller functions


How do I create some sort of utils bundle that would be accessible from all my controllers?

I have this route code in my main module:

'use strict';

angular.module('lpConnect', []).
    config(['$routeProvider', function($routeProvider) {
    $routeProvider.
        when('/home', {template: 'views/home.html', controller: HomeCtrl}).
        when('/admin', {template: 'views/admin.html', controller: AdminCtrl}).
        when('/connect', {template: 'views/fb_connect.html', controller: MainAppCtrl}).
        otherwise({redirectTo: '/connect'});
}]);

I want a function that can be common to HomeCtrl, AdminCtrl and MainAppCtrl.

How should I do it in AngularJS?


Solution

  • The way to define common code in angular is through Services.

    You would define a new service like so :

    .factory('CommonCode', function ($window) {
            var root = {};
            root.show = function(msg){
                $window.alert(msg);
            };
            return root;
        });
    

    In your controller you would inject this service..like so

    function MainAppCtrl($scope,CommonCode)
    {
         $scope.alerter = CommonCode;
         $scope.alerter.show("Hello World");
    }
    

    Just include CommonCode as an argument to your controller function.. Angular will take care of injecting it for you ( Read on Dependancy Injection ..to understand what is happening here. )