Bu "sınıflar" ın açısal olmasını gerektiren tek neden Servisler bağımlılıklarını ağrısız bir şekilde enjekte etmektir, bunları hizmet olarak kaydetmeden başlatmak için $injector.instantiate
'u kullanabilirsiniz.
Örnek Kod:
var PrivateClass = (function() {
function PrivateClass($log) {
this.hello = function() { $log.debug("Hello World!");}
}
PrivateClass.$inject = ["$log"];
return PrivateClass;
})();
angular.module('TestApp', []).run(['$injector', function ($injector) {
var p = $injector.instantiate(PrivateClass);
p.hello();
}]);
Sen PrivateClass bir örneğini oluşturmak için, ihtiyaç hizmetlerin içinde (veya herhangi bir yerde) yapıcısındaki $injector.instantiate(PrivateClass)
kullanmak. Bir singleton gibi davranmak için PrivateClass'a ihtiyacınız varsa (gerçek bir açısal hizmet gibi), bir kez başlatan ve referansını arayanlara döndüren bir accessor sınıfı kullanabilirsiniz.
Bunun avantajı, özelleştirme hizmetinin (bu durumda işlev angular.run'a iletilir), bağımlılık dizisinin yalnızca Özel Sınıf'a ($ log) geçirilebilmesi için gerekli olan bağımlılıklarla kirlenmesine gerek olmamasıdır. bu durumda). Bu bir yıllık bir soru olduğunu fark ettim ama bunu tam olarak elde etmenin bir yolunu ararken buldum ve nihayetinde bu yaklaşımı kullanarak çözdüm.
Bunun amacı nedir? Onları kullanmak istemediğiniz modülleri içine enjekte edemezsiniz. – ribsies
Hayır ve Angular-UI kitaplığı ile kullanılan herhangi bir özel kural görmedim, örneğin –
olası kopyası [Özel fabrika nasıl oluşturulur? angularjs içinde?] (http://stackoverflow.com/questions/24284756/how-to-create-private-factory-in-angularjs) –