Angularjs 在工厂方法内调用控制器
目前我有一个工厂方法,如下所示:Angularjs 在工厂方法内调用控制器,angularjs,factory,Angularjs,Factory,目前我有一个工厂方法,如下所示: open_model: function(som_id){ var modelSettings = $aside({ controller: // a very big controller code size: 'sm', placement: 'right',
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行,因此会使工厂变脏。那么,是否有一种方法可以在其他地方定义控制器,并按名称调用控制器,而不是编写代码 您可以在任何需要的地方定义控制器,并将其作为依赖项注入工厂(尽管我不知道控制器在工厂中会做什么)
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;
}
}
});
},
您不应访问工厂内的控制器。你这样做是在混淆视听。如果有一些功能需要分离,请创建另一个服务并将该服务注入工厂。您的控制器应该利用服务和工厂,而不是反过来 除了@nikjohn的答案之外,您还可以创建一个单独的角度控制器,并在您的
modelSettings
中引用它。既然你已经说过你的modal控制器代码超过了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;
}
}
});
}
控制器:CltrFun,函数CltrFun(){//cltr code….}请解释一下。我想要这样的东西:controller:myIdController(按名称调用控制器)如果你能在plunker或jsFiddlehi@Lihini上共享它就好了,你的答案似乎是我问题的解决方案。但是你也能帮我把一些值作为参数(?可能)传递给这个控制器吗。这样的事情是可能的吗?控制器:“ModalInstanceCtrl(parm1,param2)”您已经使用
resolve
定义了参数。只需将其包含在控制器构造函数中。我已经编辑了我的答案,包括modal_数据
。谢谢@Lihini。。老实说,我不知道下决心的目的。。我只是添加了它,因为在前面的一些代码中它就在那里。现在我明白了。。非常感谢。@Lihini您能否提供一个示例,说明如何使用resolve
并从控制器中获取这些值?是否类似于使用mdDialog
@Sanira的local
,我已经在这里添加了一个如何使用resolve
的示例。请检查resolve
对象中的modal_data
字段,以及它是如何包含在控制器中的。