【问题标题】:How do you inject a condition service into AngularJS 1 Controller如何将条件服务注入 AngularJS 1 控制器
【发布时间】:2017-01-07 02:05:58
【问题描述】:

我有一个设计为自包含的角度模块。消费应用程序可以添加带有 url 参数的指令,并且在与小部件交互时,它将使用该 url 作为它的整体数据源。这有一个通用的 LoadService,它使用 $http 来加载数据,并期望特定的 JSON 格式来运行小部件。

现在我正在尝试重构,以便有人也可以创建自定义加载服务并将其注入模块,但如果没有注入,那么它将使用默认数据加载。因此,我试图弄清楚如何创建一种注入 CustomLoadService 的方式,如果它是由使用模块的应用程序定义的。但是,如果未定义自定义服务,它不应该出错,它应该只使用默认服务。

我正在研究 $injector.get 并认为这是一种可能性,但我无法将 $injector 注入控制器。我认为注入就像$location 一样简单。比如……

angular
  .module('Widget')
  .controller('WidgetController',[
    '$scope', 
    'WidgetLoadService', 
    '$injector', 
    WidgetController
  ]);

这种方法似乎不起作用,所以我想知道......解决此问题的最佳最“角度方式”是什么。我应该如何使用 $injector。

【问题讨论】:

    标签: javascript angularjs dependency-injection angularjs-injector


    【解决方案1】:

    你可以使用$injector:

    app.controller('MainCtrl', function($scope, $injector) {
      $scope.name = $injector.get('test').name;
    }).factory('test', function() { return {name: 'world'} });
    

    所以你可能会得到这样的结果:

    app.controller('MainCtrl', function($scope, shareService) {
      $scope.name = shareService.getData();
    
      shareService.setDataService('dataService2');
    
      $scope.name = shareService.getData();
    })
    
    .factory('shareService', function($injector) { 
      var dataServiceName;
    
      return {
        setDataService: function(name) {
          dataServiceName = name;
        },
        getData: function(name) {
          return $injector.get(dataServiceName || 'dataService').data;
        }
      } 
    
    })
    
    
    .factory('dataService', function() { return {data: 'world'} })
    
    .factory('dataService2', function() { return {data: 'world 2'} });
    

    【讨论】:

    • 看看我提供的代码,我做错了什么导致它无法工作?我得到“ $injector is not defined”
    • 也许我错过了这些差异,但看起来您的示例与我提供的代码应该没有什么不同,但我的代码不起作用,我错过了什么?
    • 您实际上没有提供任何代码...用您的代码创建最少的 plunk。
    • 我发现了这个问题,与注入它工作正常的服务无关。我在一个超类中有一个 init 函数,我忘记将参数名称从 $location 更改为 $injector 所以我得到一个未定义的,因为 $injector 在该函数中不存在。
    猜你喜欢
    • 1970-01-01
    • 2013-05-28
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-08-29
    • 1970-01-01
    • 2012-05-20
    相关资源
    最近更新 更多