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
字段,以及它是如何包含在控制器中的。