2016-11-18 88 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'。非常感謝! –