AngularJS中是否提供自动依赖注入?

时间:2014-12-23 11:17:14

标签: angularjs dependency-injection

我希望自动依赖将Angular内置服务注入Angular模块/ app中的所有服务。

我要注入的服务是... $ exceptionHandler

不希望 $ exceptionHandler为全局...例如我不希望做...

window.$exceptionHandler = $exceptionHandler

但我也不希望依赖性地将$ exceptionHandler注入到每个服务中使用...

angular.module('myApp').factory('myService', ['$exceptionHandler', function ($exceptionHandler) {

是否可以自动将Angular内置服务注入Angular模块/应用程序中的所有服务?

非常感谢

1 个答案:

答案 0 :(得分:3)

通过嵌套模块可以更方便。在根(或全局)模块中,注入$ exceptionHandler以及您创建或想要使用的所有其他模块。根模块的所有子模块都会有$ exceptionHandler注入而不会更加轻松。但是,您仍然必须在控制器和工厂函数定义中命名$ exceptionHandler,因此不可能完全摆脱注入伪影。

示例:

<强> app.js

angular.module('app', ['ionic', '$exceptionHandler', 'ngCordova','app.home',
'app.impressum'])

.run(function ($ionicPlatform, $state) {
   ..
})
.config(function ($stateProvider, $urlRouterProvider, $provide, $exceptionHandler, $ionicConfigProvider, $compileProvider) {

    $stateProvider
        .state('app', {
            ...
        })
    }
);

现在app.home-Module:

<强> home.js

angular.module('app.home', ['app.home.controller', 'app.home.factory']);

主/ controller.js

angular.module('app.home.controller', [])
  .controller('homeController', function ($scope, $exceptionHandler) {
    ...
  });

app.home.factory app.impressum 的三个模块非常相似,所以我把它留给你。

正如您所看到的,您仍然需要将$ exceptionHandler放入控制器的函数参数中,但模块本身不需要注入,因为它继承了它的父模块 app的所有注入。主页应用

通过在AngularJS应用程序中使用模块层次结构,可以在适当的位置进行注入...对于整个应用程序,对于模块组或仅在单个模块上进行更全局。此外,我们为App的部分提供了一个非常干净的结构。