2016-02-06 19 views
9

Bir kullanıcı adı zaten mevcut olup olmadığını kontrol etmek için özel bir doğrulayıcıda bir hizmet kullanmaya çalışıyorum.Angular2'de özel bir doğrulayıcıda bir hizmet enjekte

Çalışmıyor. CharacterNameValidator'da, 'this', benim sınıfa değil, kontrole işaret eder. Servis tanımlanmamıştır. Hizmetimi doğrulayıcıda nasıl kullanabilirim?

Daha genel olarak, bağımsız bir doğrulayıcıda bağımsız değişkenleri nasıl aktarabilirim?

cevap

6

Doğrulamada this'un ne anlama geldiğini kontrol etmeniz gerekir. Daha sonra beklendiği gibi çalışması gerekir başka bind

this.name = fb.control('', this.characterNameValidator.bind(this)); 

Everything ile bunu yapabilirsiniz.

+0

Mükemmel çalışıyor, teşekkürler. – Kelem

+1

Bu işaretin doğru nesneyi tutmak için bir ok işlevi de kullanabilirsiniz. – toskv

+0

@SnareChops - Bunun "bind" belgelerinin nerede olduğunu belirtebilir misiniz? Faydalı bir şey bulamıyorum. –

4

İçeriği aynı tutmak için bir ok işlevi kullanabilirsiniz.

this.name = fb.control('', (control: Control) => this.characterNameValidator(control)); 
+0

Doğrulama parametreleri nedir? Form, 'control''ü yok sayılan ok işlevine geçirir ve sonra' characterNameValidator' parametreyi asla alamaz. Ok işlevinin argüman listesine eklendikten sonra doğrulayıcıya iletildiyse, o zaman bu sorunu çözecektir, ancak bu ek adım aslında doğrulayıcı bir işlev referansı olarak geçerliliğin geçirilmesine kıyasla ne işe yarıyor? – SnareChops

+0

Parametreleri ekledim. Ayrıca, characterNameValidator yöntemi bir şey döndürdüğünden, ok işlevinin içindeki blokla sadece uzaklaşabilirsiniz. – toskv

İlgili konular