Cristol.GdM
Cristol.GdM

Reputation: 534

Grouping Angular services together to inject them in multiple Controllers

I am currently trying to refactor everything on our company following best practices and JohnPapa's style guide, which means that among other things, I am supposed to switch from setTimeout to $timeout, setInterval to $interval, etc.

However, I find it tiring, messy, and counter-intuitive to have to inject those services every single time. This results in long repetitive controller declarations where half of the elements are useless and obvious.

angular.module('myModule',[])
    .controller('MyController', ['$scope', '$http', '$timeout', '$interval', MyController])
    .controller('MyController2', ['$scope', '$http', '$timeout', '$interval', MyController2])
    .controller('MyController3', ['$scope', '$http', '$timeout', '$interval', MyController3])

I find this ugly, and a pain to maintain; this is the reason why I've always favored setTimeout over $timeout, but now I'm trying to improve.

Would there be a way to "mass inject" services?

For example something such as:

var baseServices = {
    http: $http,
    scope: $scope,
    timeout: $timeout,
    interval: $interval,
};

angular.module('myModule',[])
    .controller('MyController', ['baseServices', MyController])
    .controller('MyController2', ['baseServices', MyController2])
    .controller('MyController3', ['baseServices', MyController3])

var MyController = function(baseServices){
        baseServices.$timeout(...);
}

Is this something remotely possible?

Upvotes: 0

Views: 173

Answers (1)

Naimad
Naimad

Reputation: 101

Maybe you could use a factory to group all these services and use it from your controller

angular.module('myModule',[])
   .controller('MyController', ['baseServices', MyController])
angularApp.factory('baseServices', baseServices );
function baseServices ($scope, $http, $timeout, $interval) {
        return {
            scope: $scope,
            http: $http,
            timeout: $timeout,
            interval: $interval
        };
}

Upvotes: 1

Related Questions