Javascript 如何将控制器注入服务?

Javascript 如何将控制器注入服务?,javascript,angularjs,dependency-injection,Javascript,Angularjs,Dependency Injection,通常,服务被注入控制器中 controller.js angular .module('myApp') .factory('myService', function($http){ var myService = { get: get }; return myService; function get(){ // Get function.

通常,服务被注入控制器中

controller.js

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

      var myService = {
           get: get
      };         

      return myService;          

      function get(){
           // Get function.
      }

});
angular
    .module('myApp')
    .controller('myController', function(myService) {

    myService.get();

});
service.js

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

      var myService = {
           get: get
      };         

      return myService;          

      function get(){
           // Get function.
      }

});
angular
    .module('myApp')
    .controller('myController', function(myService) {

    myService.get();

});

但有可能逆转方向吗?将控制器注入服务?

直接的答案是否定的。您不会将控制器注入服务或其他任何地方。真正的问题是你为什么要这么做

//更新

假设您指的是$mdDialog。
mdDialog
服务需要一个控制器函数,您可以向它传递一个对函数的引用

例如:

angular.module('app',[])
  .factory('myService', function(){
    return {
      myMdDialogCtrl: function($scope, $mdDialog, items){
        // Controller for MD Dialog
      }
    }
  })
  .controller('ctrl1', function($scope, $mdDialog, myService){
    $mdDialog.show({
      ...
      controller: myService.myMdDialogCtrl
    })
  })
  .controller('ctrl2', function($scope, $mdDialog, myService){
    $mdDialog.show({
      ...
      controller: myService.myMdDialogCtrl
    })
  })

你为什么要这么做?我不确定这在什么情况下有用。我使用角度材质
mdDialog
,我想要一个干净的控制器结构。基本上,
mdDialog
在ctrl1中调用,并且该
mdDialog
模板的控制器位于同一控制器中,该控制器为
ctrl1
,我希望为
mdDialog
提供的控制器位于不同的文件中,因此我希望将mdDialog放在服务中,以便其他控制器可以使用信息技术这将帮助我有效地重用代码。不要在服务中注入控制器,而是将控制器中的功能导出到另一个服务,并将其注入服务。例如,如果控制器C具有功能A,并且您希望在服务S中注入。那么,将功能A导出到服务A,然后在服务S中注入服务A。是的,@Dimitri所说的是正确的。将控制器注入到服务中会破坏依赖注入系统的全部功能@Dimitri如果你不介意给我一些简单的演示,我很感激,我只是最近在学习angularjs。哦,是的,很遗憾地说,我的理由是在上面的评论部分,我从来没有想过在控制器中为
$mdDialog
传递函数是可能的。非常感谢!