Javascript 如何将控制器注入服务?
通常,服务被注入控制器中 controller.jsJavascript 如何将控制器注入服务?,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.
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
传递函数是可能的。非常感谢!