AngularJS动态注入范围或控制器

Mas*_*ass 15 javascript angularjs

是否可以在运行期间注入示波器或控制器?或任何其他建议动态地将服务注入控制器?

Application.controller('IndexController', function($scope){

    // some actions

    if(someconditions) {
            $scope.$inject = [someServiceName];
            // and here i want to use service methods 
    }

});
Run Code Online (Sandbox Code Playgroud)

提前致谢

Mar*_*cok 60

可以使用$ injector将服务(通过名称)动态注入控制器.能够通过控制器参数注入服务只是Angular提供的便利.在引擎盖下,Angular使用$ injector来检索对象实例.但我们也可以自己使用$ injector.

function MyCtrl($scope, $injector) {
  $scope.doSomething = function(someService) {
    var service = $injector.get(someService)  // someService contains the name of a service
    service.value += 10
}
Run Code Online (Sandbox Code Playgroud)

小提琴.

  • 这种方法的一个巨大优势是,当您在一组服务之间有一个公共公共接口时,您只需要根据条件执行1个服务.为了防止必须执行其中一个服务,您可以动态地注入它,而不是拥有100个依赖项 (7认同)
  • 我会警告不要过度使用$ injector.有一个可见的依赖列表告诉我我的控制器做了多少工作,可能会迫使我拆分工作 (3认同)
  • 我的用例是用于包装REST API.每个"模型"类型都可以返回其他类型的相关项,因此您需要能够动态选择正确的服务来表示REST API亲属. (3认同)