我可以创建一个工厂来在AngularJS中创建服务吗?

时间:2014-05-22 08:31:53

标签: angularjs angularjs-service angularjs-factory

我想使用这项服务,但可能会发生我的应用程序的某些部分需要相同的服务但​​内部使用不同的参数。由于服务总是在我理解的情况下引用相同的实例,这意味着要么在执行操作之前手动编辑参数,要么将它们传递给每个函数。这会很快变得混乱,我想知道是否有可能创建一个工厂来初始化我需要的服务的不同版本。

像这样的东西,例如:

function FooService(){
    this.setParams = function(params){
        ...
    }
};

function FooServiceFactory(){
    return{
        createService: function(name, params){
            var serv = new FooService();
            serv.setParams(params);
            ServiceModule.service(name, serv);
        }
    }
};

1 个答案:

答案 0 :(得分:0)

您也可以创建工厂。

app.factory("InstantiateMe", [function() {
    return function(params)
    {
        // some code
    };
}]);
app.controller("Ctrl", ["InstantiateMe", function(InstantiateMe) {
    var instance = new InstantiateMe({param: "value"});
}]);

简而言之,工厂功能只返回:工厂。它的返回值可以是一个对象,一个函数,或者在这种特殊情况下,它是一个构造函数。您可以通过这种方式实例化所需服务的多个实例。

这是一个nice article on the subject,详细说明了我总结的内容,您可能会觉得有用。