2013-03-14 14 views
34

AngularJs bir hizmette filtreleri enjekte etmek için bir yol olup olmadığını bilmek istiyorum.Enjeksiyon tarihiFilterJs içinde bir hizmet içinde süzgeç

Ben yüzden bir hizmette bir filtre enjekte etmek mümkündür ya da belki başka bir şekilde erişilebilir olup olmadığını bilmek istiyorum

app.factory('educationService', [function($rootScope, $filter) { 

    // ..... Some code 

    // What I want 
    console.log(dateFilter(new Date(), 'yyyy-MM-01')); 

    // ..... Some code 

}]); 

çalışıyorum.

Ve bu konuyla ilgili bir dökümantasyon bağlantınız varsa, bu gerçekten çok hoş olurdu :) Angular belgesinde arama yaptım ve bu konuda gerçekten faydalı hiçbir şey bulamadım.

app.factory('myService', ['$rootScope', '$filter', function($rootScope, $filter) 

(Eğer inşa sürecinde minification kullandığınızda dizi sadece tabi)

belirli aramak için:

Teşekkür :)

cevap

53

Öncelikle böyle filtreyi enjekte etmek zorunda süzgeçli olarak programlanabilir:

$filter(name) re

var dateFilter = $filter('date'); 
var filteredDate = dateFilter(new Date(), 'yyyy-MM-01') 
+1

Merhaba, Cevabınız için teşekkürler. Aradığımda denedim ama bir hatam oldu "$ filtre bir işlev değil" bu yüzden yanlış olduğunu düşündüm. Neler olup bittiğini kontrol edeceğim. Belki eksik bir bağımlılık ya da bunun gibi bir şey. Örnek iyiliğim için $ filtre iletmenin yolu iyi mi? –

+2

Komut dosyalarınızı küçültürseniz yeterince iyi değil. Her zaman app.factory ('educationService', [ '$ rootScope', '$ filtresi', function ($ rootScope $, filtre) {... '' güvenli olacak. Satır içi ek açıklama kullanılan görünüyor ama dizinin içindeki asıl bağımlılıkları güvenli bir şekilde enjekte etmeyi unuttun – Stewie

+0

Evet, komutlarımı küçültüyorum. Bilgi için teşekkürler, şimdi mükemmel çalışıyor :) –

45

filtre işlevi Filter ile sonlandırılmış filtre adı altında $injector kayıtlıysa: Eğer daha argümanlarınızla çağırabilir özel filtre işlevi döner. -

Bu, açısal yerleşik filtreler ve kendi özel filtreleriniz için geçerlidir. (Küçültmek değilse)

Yani, bu gibi hizmete dateFilter enjekte edebilir

app.factory('educationService', [function($rootScope, dateFilter) { 

Eğer sadece bir filtre kullanıyorsanız, bu yöntem size gerçek bağımlılıkları hakkında daha spesifik olmasını sağlar. Birden çok filtre kullanmanız gerekiyorsa, @Stewie şovları gibi $filter enjekte edebilirsiniz.

+2

+1 Paylaşım için teşekkürler. Bunu aslında bilmiyordum. – Stewie

+0

Paylaşım için teşekkürler :) –

+2

+1 Bu cevap, @Stewie tarafından seçilen yanıttan daha doğrudur çünkü bu, '$ filter' hizmetinin tamamı yerine belirli bir filtrenin enjekte edilebilme yeteneğinden bahseder – tsemer

İlgili konular