如何将控制器注入服务?

时间:2016-11-18 09:06:34

标签: javascript angularjs dependency-injection

通常,服务是在控制器中注入的。

controller.js

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

      var myService = {
           get: get
      };         

      return myService;          

      function get(){
           // Get function.
      }

});

service.js

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

    myService.get();

});

但是有可能扭转局面吗?将控制器注入服务?

1 个答案:

答案 0 :(得分:1)

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

//更新

假设您指的是https://material.angularjs.org/latest/api/service/ $ 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
    })
  })