2013-08-19 18 views
7

Angularjs ile form doğrulaması yapmak Gerekli olan tüm alanları, kullanıcı göndermeyi tıkladığında hatalı olarak işaretlemek istiyorum.Angularjs formunda doğrulama kuvveti denetleniyor

Denetimleri hata ile biçimlendirmek için input.ng-dirty.ng-invalid kullanıyorum. Yani istediğim, kullanıcı formu gönderdiğinde gerekli kontroller (veya tüm kontroller .. benim için aynı olacak) üzerinde ng-kirli ayarlamaktır.

Doğrulama çalışıyor. Neden olduğunu anlıyorum, neden denediğim yanlış olabilir, ama aynı etkiyi yapmak için başka bir yol bulamadım, bence haklı olmak için çok karmaşık bir şey var. Denedim ne

oldu:

<div ng-app> 
    <form novalidate> 
     <input name="formvalue" type="text" ng-model="formvalue" required /> 
     <input type="submit" /> 
    </form> 
</div> 

http://jsfiddle.net/yq4NG/

cevap

8

en Varsayılan zorunlu alan olarak

<div ng-app>...</div> 

http://jsfiddle.net/yq4NG/1/

sararak senin jsfiddle için açısal ekleyerek başlayalım girişte onaylanacaktır (kirli). Herhangi bir girdi (bozulmamış) öncesinde gönderilmelerini onaylatmak istiyorsanız, gönderim düğmenizde bozulmamış alanları kontrol edecek ve kirletecek bir işlev çalıştırabilirsiniz. i örnekte yapmış budur

: http://jsfiddle.net/yq4NG/6/

Muhtemelen özel biçemleyicileri ve doğrulayıcılarını kullanarak yeniden kullanılabilir bir çözüm inşa edebileceğini ancak bu solüsyonu bir basittir.

DÜZENLEME:

basit tekrar kullanarak sadece sınıfları:

açısal $setPristine() eşdeğer olan bir $setDirty() yöntem sağlamaz Çünkü: [yorumlarda @XMLilley önerdiği gibi] http://jsfiddle.net/yq4NG/8/

DÜZENLEME $dirty durumunu, $ viewValue öğesini $modelValue'un içeriğiyle güncelleyerek tetikliyoruz. Hiçbir şey değiştirmez, ancak her $pristine alanını manuel olarak girip, hiçbir şeyi değiştirmeden değeriyle karıştırılan bir kullanıcıyı simüle eder.

+0

Çözümünüz için teşekkürler. Klanı kurtarmayı unuttum, bu yüzden ng-app'ı kaçırıyordum. Ama bu kaçınmaya çalıştığım karmaşık çözümler. Eksik olduğum bir şey değil mi? Nadir bir köşe-durum kullanımı olduğuna inanamıyorum. (sadece bir doğrulama göstermek için aynı değere bir denetim atama, biraz garip görünüyor) – Fernando

+0

Açısal doğrulama yerinde ve anlık yanıt ile ilgilidir. Sunucu tarafı doğrulamasından farklı olarak. Gerekli alanlar doğrulandı. Form "ng-invalid-required" sınıfında belirtilen gerekli nitelikler ayarlanmış ve doldurulmamışsa sunulmaz. Fakat alanlar değişmediğinden kirli değiller. –

+1

@Fernando Cevabımı, ihtiyaçlarınızı daha iyi karşılayabileceğiniz başka bir çözümle güncelledim. Eğer aradığınız çözüm bu değilse, bana bildirin. Öyleyse, lütfen cevap olarak işaretleyin. –

İlgili konular