2017-02-14 42 views
0

現在我希望創建一個對象,你可以在任何時候實例化,但仍然可以使用角度服務:角相當於對象原型

就拿下列對象:

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

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

Ofcourse這object不能使用$sessionStorage但我的問題是你將如何創建一個這樣的對象,實際上可以利用角度服務?

我想使用這種方法而不是服務或工廠的原因基本上是,我想要此對象的不同實例,我不尋找單身解決方案。

回答

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

你會在建設注入$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(); 
}