角度等同于对象原型

时间:2017-02-14 11:27:31

标签: javascript angularjs

现在我希望创建一个可以随时实现的对象,但仍然可以使用角度服务:

以下列对象为例:

var myObject = function (variableOne, variableTwo) {
    this.variableOne = variableOne;
    this.variableTwo = variableTwo
};

myObject.prototype.useAngularService = function () {
    return $sessionStorage.user;   
};

当然这个object不能使用$sessionStorage,但我的问题是你如何创建一个这样的对象,实际上可以利用角度服务?

我想使用此方法而不是服务或工厂的原因基本上是我想要这个对象的不同实例,而我不是在寻找单例解决方案。

2 个答案:

答案 0 :(得分:2)

您可以从factory返回您的类型。然后工厂将拥有Angular服务,你可以在它们周围关闭。

yourModule.factory('yourName', function($sessionStorage) {
    var myObject = function (variableOne, variableTwo) {
        this.variableOne = variableOne;
        this.variableTwo = variableTwo
    };

    myObject.prototype.useAngularService = function () {
        return $sessionStorage.user;   
    };

    return myObject;
});

您也可以使用$injector.get(...)请求任何已注册的服务,但这会导致代码变弱。

答案 1 :(得分:1)

您可以在构建时将$sessionStorage作为依赖项注入对象:

var myObject = function ($sessionStorage, variableOne, variableTwo) {
    this.$sessionStorage = $sessionStorage;
    this.variableOne = variableOne;
    this.variableTwo = variableTwo
};

myObject.prototype.useAngularService = function () {
    return this.$sessionStorage.user;   
};

然后,您将创建一个服务,作为此类对象的工厂:

function myObjectFactory($sessionStorage) {
    this.$sessionStorage = $sessionStorage;
}

myObjectFactory.prototype.getInstance = function (variableOne, variableTwo) {
    return new myObject(this.$sessionStorage, variableOne, variableTwo);
};

myModule.service('myObjectFactory', myObjectFactory);

然后将该工厂包含为控制器或其他服务的依赖项:

myModule.controller('myController', function (myObjectFactory) {
    var obj = myObjectFactory.getInstance(1, 2);
    obj.useAngularService();
}