Answers:
该ng-dirty
班告诉你,形式已经被用户修改,而ng-pristine
类告诉你的形式还没有被用户修改。所以,ng-dirty
和ng-pristine
是同一故事的两个方面。
这些类被设置在任意字段中,而形式具有两个属性,$dirty
和$pristine
。
您可以使用该$scope.form.$setPristine()
函数将表单重置为原始状态(请注意,这是AngularJS 1.1.x功能)。
如果$scope.form.$setPristine()
甚至在AngularJS的1.0.x分支中也想要-ish行为,则需要推出自己的解决方案(可以在此处找到一些非常好的解决方案)。基本上,这意味着遍历所有表单字段并将其$dirty
标志设置为false
。
希望这可以帮助。
pristine告诉我们某个字段是否仍为纯文本,dirty告诉我们该用户是否已在相关字段中输入了任何内容:
<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>
注册了单个keydown事件的字段不再是原始数据(不再是原始数据),因此永远是肮脏的。
这两个指令显然具有相同的目的,尽管似乎角度小组决定同时包含这两个指令会干扰DRY原理并增加页面的有效负载,但同时使用这两个指令仍然是相当实用的。由于您可以在CSS文件中同时设置.ng-pristine和.ng-dirty的样式,因此可以更轻松地设置输入元素的样式。我想这是添加两个指令的主要原因。
.ng-pristine
并.ng-dirty
允许使用不同的CSS样式-这似乎是重新安置背后的最正确原因
如先前答案中所述,ng-pristine
用于指示该字段尚未修改,而用于指示该字段ng-dirty
已修改。为什么两者都需要?
假设我们有一个表格,其中包含电话和电子邮件地址。需要电话或电子邮件,并且当用户在每个字段中都有无效数据时,还必须通知用户。这可以通过ng-dirty
和ng-pristine
一起使用来实现:
<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-pristine ($ pristine)
布尔值真如果表单/输入还没有被使用,但(不是由用户修改)
ng-dirty ($ dirty)
布尔值真如果表单/输入已经被使用(被用户修改)
$ setDirty(); 将表单设置为脏状态。可以调用此方法以添加'ng-dirty'类并将表单设置为脏状态(ng-dirty类)。此方法会将当前状态传播到父窗体。
$ setPristine(); 将表单设置为原始状态。此方法将窗体的$ pristine状态设置为true,将$ dirty状态设置为false,删除ng-dirty类并添加ng-pristine类。此外,它将$ submitted状态设置为false。此方法还将传播到此窗体中包含的所有控件。
当我们要在保存或重置表单后“重用”表单时,将表单重新设置为原始状态通常很有用。