无注射初始化服务(角度)

时间:2014-05-07 14:07:46

标签: angularjs

我有一个服务列表(让我们称之为“处理程序”)和一个管理员(也是一个服务)。 我希望所有处理程序都将自己“注册”给经理。 我的问题是没有人注入这些处理程序,因此它们没有被实例化,因此注册它们的代码没有被调用。如何在不注入的情况下实例化处理程序?

我不想直接向管理员注入处理程序,因为在这种情况下,注册会给它更多的灵活性并使其更通用。

代码非常简单:

理:

    angular.module("MyMain").factory('OperationsManager', function () {

        var handlers = [];

        function OperationsManager() { };

        OperationsManager.prototype.registerHandler = function (handler) {
            handlers.push(handler);
        };

        return new OperationsManager();

    });
})(angular);

HANDLER:

(function (angular) {
    angular.module("MyMain").factory('MyHandler', function (OperationsManager) {

        var Handler = {};
        Handler.prototype.someFunction = function(){

        };


        OperationsManager.registerHandler(Handler);

        return Handler;

    });
})(angular);

1 个答案:

答案 0 :(得分:0)

创建一个注入OperationsManager的服务怎么样?然后,您可以将处理程序作为参数传递,并将它们注册到OperationsManager

 yourApp.service('nameHere', ['OperationsManager',
     function(OperationsManager) {

         this.registerHandler = function(handler) {
              OperationsManager.register(handler);
         }
     }
 ])

即使这意味着您必须在某处注入此服务。必须注入一些东西。此时,您可以直接在OperationsManager中注册/取消注册。为什么不能在注入.registerHandler的任何地方拨打OperationsManager

相关问题