2016-11-18 93 views
1

通常服务被注入控制器。如何将控制器注入服务?

controller.js

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

     var myService = { 
      get: get 
     };   

     return myService;   

     function get(){ 
      // Get function. 
     } 

}); 

service.js

​​

但它有可能扭转的方式吗?将控制器注入到服务?

+0

你为什么要?我不知道这会有什么用处。 –

+0

使用角度材料'mdDialog'我想要一个干净的控制器结构。基本上''mdDialog'在ctrl1中被调用,并且'mdDialog'模板的控制器在'ctrl1'的同一个控制器中,我希望为'mdDialog'提供的控制器在不同的文件中,所以我想把服务中的mdDialog,以便其他控制器可以使用它。这将有助于我有效地重用代码。 –

+2

不是在服务中注入控制器,而是将控制器中的功能导出到其他服务并为其注入服务。例如,如果控制器C具有功能A并且您想要注入服务S.那么,将功能A导出到ServiceA,然后在S中注入ServiceA。 – Dimitri

回答

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 
    }) 
    }) 
+0

哦,是的,很难说这是,我的理由是在上面的注释部分 –

+0

我从来没有想过,有可能在控制器中传递函数'$ mdDialog'。非常感谢! –