将 Angular 服务分组在一起,将它们注入到多个控制器中



我目前正在尝试按照最佳实践和 JohnPapa 的风格指南重构我们公司的所有内容,这意味着除其他外,我应该从setTimeout切换到$timeoutsetInterval切换到$interval等。

但是,我发现每次都必须注入这些服务很累、混乱且违反直觉。这会导致长时间重复的控制器声明,其中一半的元素是无用且显而易见的。

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

我觉得这很丑陋,而且很难维持;这就是为什么我一直偏爱setTimeout而不是$timeout,但现在我正在努力改进。

有没有办法"大规模注入"服务?

例如:

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(...);
}

这是遥不可及的事情吗?

也许您可以使用工厂对所有这些服务进行分组并从控制器使用它

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
};
}

最新更新