2014-12-03 74 views
1

我对angular的研究还很陌生,并且一直在构建一个简单的CRM应用程序。对于单个资源(restful API资源),我在我的角度应用程序中定义了3-4个路由和控制器。现在,我需要反复向每个控制器注入一组服务和模块。我知道每个控制器都有它自己的范围实例和工厂/服务的共享实例,但有没有一种方法可以集中定义多个控制器的依赖关系?Angularjs - 向多个控制器注入依赖关系

在下面的示例中,$modal,growl,configuration,$scope被注入到所有3个控制器中,我只想定义一次。

房源控制器

myApp.controller('VenueListCtrl', ['$scope', '$http', 'configuration', '$modal', 'growl', 
    function ($scope, $http, configuration, $modal, growl) { 
    } 
]); 

创建/新控制器

myApp.controller('VenueCreateCtrl', ['$scope', '$http', '$location', 'configuration', 
    function ($scope, $http, $location, configuration) { 
    } 
]); 

详情控制器

myApp.controller('VenueDetailCtrl', ['$scope', '$routeParams', '$http', '$modal', 'configuration', 
    function ($scope, $routeParams, $http, $modal, configuration) { 
    } 
]); 
+0

也许你可以创建一个依赖于这些事情的服务并公开所需的行为。那么控制器将仅依赖于该服务。请记住,这不适用于'$ scope',因为它对每个控制器都是本地的。 – 2014-12-04 08:31:44

+0

@NikosParaskevopoulos我想到了这一点,但事实是每个控制器都以不同的方式使用服务/工厂。单独包含它们的模块化是非常有用的,但我希望能够在组装我的应用程序时对模块进行分组:( – 2014-12-04 09:36:13

回答

0

你可以做的最好的是:控制器的使用未anonimus函数声明:

var depsToInject = ['$scope', 'growl', 'configuration', '$modal']; 

myApp.controller('Ctrl1' , Ctrl1); 

Ctrl1.$inject = depsToInject ; 

function Ctrl1($scope, growl, configuration, $modal) { 
    .... 
} 

myApp.controller('Ctrl2' , Ctrl2); 

Ctrl2.$inject = depsToInject ; 

function Ctrl1($scope, growl, configuration, $modal) { 
    .... 
} 

等但这并不完全统一的声明,我不认为有更好的办法。但是你可以从另一端尝试,并用另一个依赖包装你的依赖,但我也不喜欢这种方式。

+0

)这使得代码稍微更清晰,但并未完成我正在寻找的分组注入。有一种方法可以声明一个依赖于其他4个自定义模块并直接注入的模块?同时,它需要公开已注入模块的底层API /对象。 – 2014-12-04 09:38:32