Yanıtlar:
ng-dirty
Sınıf oysa formu, kullanıcı tarafından değiştirilmiş olduğunu söyler ng-pristine
sınıf formu kullanıcı tarafından modifiye edilmemiş olduğunu söyler. Yani ng-dirty
veng-pristine
aynı hikayenin iki yüzü vardır.
Formun iki özelliği varken, sınıflar herhangi bir alanda ayarlanır $dirty
ve$pristine
.
$scope.form.$setPristine()
Bir formu bozulmamış duruma sıfırlamak için işlevi kullanabilirsiniz (lütfen bunun bir AngularJS 1.1.x özelliği olduğunu unutmayın).
$scope.form.$setPristine()
AngularJS'nin 1.0.x dalında bile bir -ish davranışı istiyorsanız, kendi çözümünüzü yuvarlamanız gerekir (oldukça iyi olanlardan bazıları burada bulunabilir ). Temel olarak bu, tüm form alanlarını yinelemek ve $dirty
bayraklarınıfalse
.
Bu yardımcı olur umarım.
bozulmamış bize bir alanın hala bakir olup olmadığını, kirli ise kullanıcının ilgili alana herhangi bir şey yazıp yazmadığını söyler:
<script src="https://ajax.googleapis.com/ajax/libs/angularjs/1.0.8/angular.min.js"></script>
<form ng-app="" name="myForm">
<input name="email" ng-model="data.email">
<div class="info" ng-show="myForm.email.$pristine">
Email is virgine.
</div>
<div class="error" ng-show="myForm.email.$dirty">
E-mail is dirty
</div>
</form>
Tek bir tuş atma olayını kaydeden bir alan artık bakir değildir (artık bozulmamış değildir) ve bu nedenle sonsuza dek kirlenmiştir.
Her iki yönerge de açıkça aynı amaca hizmet ediyor ve açısal ekibin hem DRY ilkesine müdahale etme hem de sayfanın yükünü artırma kararı gibi görünse de, ikisinin de etrafta olması oldukça pratik. Css dosyalarınızda stil için hem .ng-bozulmamış hem de .ng-dirty mevcut olduğundan, giriş öğelerinizi biçimlendirmek daha kolaydır. Sanırım her iki yönergeyi de eklemenin birincil nedeni buydu.
.ng-pristine
ve .ng-dirty
farklı css stil izin - Bu repitition arkasında en doğru neden gibi gelmiyor
Daha önceki cevaplarda ng-pristine
belirtildiği gibi, alanın değiştirilmediğini belirtmek içindir, ancak değiştirildiğini ng-dirty
belirtmek içindir. Neden ikisine de ihtiyacın var?
Diyelim ki alanlar arasında telefon ve e-posta adresi olan bir formumuz var. Telefon ya da e-posta gereklidir ve ayrıca her alanda geçersiz veri olduğunda kullanıcıyı bilgilendirmeniz gerekir. Bu, ng-dirty
ve ng-pristine
birlikte kullanılarak gerçekleştirilebilir :
<form name="myForm">
<input name="email" ng-model="data.email" ng-required="!data.phone">
<div class="error"
ng-show="myForm.email.$invalid &&
myForm.email.$pristine &&
myForm.phone.$pristine">Phone or e-mail required</div>
<div class="error"
ng-show="myForm.email.$invalid && myForm.email.$dirty">
E-mail is invalid
</div>
<input name="phone" ng-model="data.phone" ng-required="!data.email">
<div class="error"
ng-show="myForm.phone.$invalid &&
myForm.email.$pristine &&
myForm.phone.$pristine">Phone or e-mail required</div>
<div class="error"
ng-show="myForm.phone.$invalid && myForm.phone.$dirty">
Phone is invalid
</div>
</form>
ng-bozulmamış (bozulmamış $)
Boolean True form / giriş henüz kullanılmadıysa ( kullanıcı tarafından değiştirilmediyse) )
ng-kirli (kirli $)
Form / girdi kullanılmışsa Boolean True ( kullanıcı tarafından değiştirilmişse )
$ setDirty () öğesini; Formu kirli bir duruma ayarlar. Bu yöntem, 'ng-dirty' sınıfını eklemek ve formu kirli bir duruma (ng-kirli sınıf) ayarlamak için çağrılabilir. Bu yöntem, mevcut durumu üst formlara yayacaktır.
$ setPristine (); Formu bozulmamış durumuna ayarlar. Bu yöntem, formun $ bozulmamış durumunu true, $ dirty durumunu false olarak ayarlar, ng-dirty sınıfını kaldırır ve ng-pristine sınıfını ekler. Ek olarak, $ submit durumunu false olarak ayarlar. Bu yöntem ayrıca bu formda bulunan tüm kontrollere de uygulanacaktır.
Bir formu eski haline döndürmek, bir formu kaydettikten veya sıfırladıktan sonra 'yeniden kullanmak' istediğimizde genellikle yararlıdır.