2016-11-18 10 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にエクスポートしてからServiceAをSに挿入します。 – 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'。それについて大きな感謝! –

関連する問題