在AngularJS中,ng-pristine和ng-dirty之间有什么区别?

syn*_*tic 101 angularjs

ng-pristine和之间有什么区别ng-dirty?看起来你可以两个都是true:

$scope.myForm.$pristine = true; // after editing the form
Run Code Online (Sandbox Code Playgroud)

Gol*_*den 210

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.

希望这可以帮助.

  • 这是对的,但我想(恐惧)这只是AngularJS开发人员可以回答的问题.换句话说:我不知道. (6认同)
  • 我认为这取决于你的意图:有时候,你想在特定情况下*显示*额外的东西,有时你需要*隐藏*某些特定情况下的东西.根据您的使用情况,两者都可能是合适的.当然,虽然它在技术上是一样的,但故意不是. (3认同)
  • 很好的答案,但为什么2个班,如果他们是同一个故事的两个方面?正如我所说,你既可以是真的,也可以是假的. (2认同)
  • @synergetic它基本上就像ng-show和ng-hide,一个就足够但我们有两个没有明显的理由 (2认同)

小智 41

pristine告诉我们一个字段是否仍然是处女,而脏告诉我们用户是否已在相关字段中输入任何内容:

<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>
Run Code Online (Sandbox Code Playgroud)

已注册单个keydown事件的字段不再是处女(不再是原始的),因此永远是脏的.

  • 这没有解释任何事情.问题是"有什么不同".没有解释你的处女意味着什么,你的意思是脏. (2认同)

zsz*_*zep 33

这两个指令显然都有相同的目的,尽管看起来角度团队决定既干扰DRY原则又增加了页面的有效负载,但将它们放在一起仍然是相当实际的.您可以更轻松地设置输入元素的样式,因为您可以在.cn文件中使用.ng-pristine和.ng-dirty进行样式设置.我想这是添加两个指令的主要原因.

  • 事实上`.ng-pristine`和`.ng-dirty`的+1允许不同的css样式 - 这似乎是重复背后最正确的原因 (18认同)

小智 10

如前面的答案中所述,ng-pristine用于表示该字段尚未被修改,而是ng-dirty用于表示已被修改.为什么需要两者?

假设我们在这些字段中有一个带有电话和电子邮件地址的表单.无论是电话还是电子邮件,您还必须在每个字段中收到无效数据时通知用户.这可以通过使用ng-dirtyng-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>
Run Code Online (Sandbox Code Playgroud)