在工厂方法中调用控制器

时间:2016-11-29 06:21:46

标签: angularjs factory

目前我有一个像这样的工厂方法:

            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行代码,因此它使工厂变脏。那么有没有办法在其他地方定义控制器,并按名称调用控制器而不是编写代码。

3 个答案:

答案 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)

您永远不应该访问工厂内的控制器。你这样做会让人担忧。如果您想要分离出功能,请创建另一个服务并将该服务注入您的工厂。您的控制器应该利用服务和工厂,而不是相反。