2015-02-23 22 views
6

Bazı 'özel' hizmetler içeren bir açısal modül var. Bu özel servisler sadece aynı modülde bulunan diğer servisler tarafından ihtiyaç duyulur ve test edilmek üzere bunları açığa çıkarır. Ama diğer modüllerin bu hizmetleri kullanmasını istemiyorum.özel açısal servis veya denetleyici

Bu tür hizmetleri 'özel' olarak işaretlemek mümkün mü? En azından bu hizmetleri adlandırmak için bir sözleşme var mı?

+0

Bunun amacı nedir? Onları kullanmak istemediğiniz modülleri içine enjekte edemezsiniz. – ribsies

+0

Hayır ve Angular-UI kitaplığı ile kullanılan herhangi bir özel kural görmedim, örneğin –

+0

olası kopyası [Özel fabrika nasıl oluşturulur? angularjs içinde?] (http://stackoverflow.com/questions/24284756/how-to-create-private-factory-in-angularjs) –

cevap

1

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.

İlgili konular