目前我有一个像这样的工厂方法:
open_model: function(som_id){
var modelSettings = $aside({
controller: // a very big controller code
size: 'sm',
placement: 'right',
templateUrl: 'views/id/modal.html',
resolve: {
modal_data: function(){
return area_id;
}
}
});
},
我想从这个方法中分离控制器并按名称调用它。目前,这在控制器部分中是> 100行代码,因此它使工厂变脏。那么有没有办法在其他地方定义控制器,并按名称调用控制器而不是编写代码。
答案 0 :(得分:3)
除了@nikjohn的答案,你还可以创建一个单独的角度控制器并在你modelSettings
内引用它。由于您已经说过模态的控制器代码超过100行,这甚至可能是更好的解决方案。
angular.module('myApp').controller('ModalInstanceCtrl', ['$scope', 'modal_data', function($scope, modal_data) {
// modal controller code goes here
}]);
// and refer it in your factory method
open_model: function(som_id){
var modelSettings = $aside({
controller: 'ModalInstanceCtrl'
size: 'sm',
placement: 'right',
templateUrl: 'views/id/modal.html',
resolve: {
modal_data: function(){
return area_id;
}
}
});
}
答案 1 :(得分:1)
您可以在任何地方定义您的控制器,并将其作为依赖项注入您的工厂(虽然我不知道控制器将在工厂内做什么)。
controllerFn: function(a, b) {
// ......
}
open_model: function(som_id, controllerFn){
var modelSettings = $aside({
controller: controllerFn,
size: 'sm',
placement: 'right',
templateUrl: 'views/id/modal.html',
resolve: {
modal_data: function(){
return area_id;
}
}
});
},
答案 2 :(得分:0)
您永远不应该访问工厂内的控制器。你这样做会让人担忧。如果您想要分离出功能,请创建另一个服务并将该服务注入您的工厂。您的控制器应该利用服务和工厂,而不是相反。