在 Angular 中访问无格式输入的 $pristine 属性?

Accesing $pristine property of input without form in Angular?

假设我有以下 HTML...

<div class="row">
    <div class="col-xs-3 align-right">
      <p>Email</p>
    </div>
    <div class="col-xs-7">
      <input type="text" class="form-control" ng-model="registrationForm.email.value"/>
      <span class="error-label" ng-hide="registrationForm.email.valid"><span class="glyphicon glyphicon-remove"></span>Must be a valid email!</span>
    </div>
  </div>

HTML 的这一点创建了一个电子邮件字段,如果提供的电子邮件无效,则会显示一个错误标签。这非常有效,并且不是我的问题的一部分。

我想稍微改变一下这个标签的行为。当用户第一次访问表单时,我不想显示错误标签,除非用户更改了表单输入的值。

$pristine$dirty 属性似乎是关键,但我对如何使用它们感到困惑。如果我尝试访问 email.value(即 registrationForm.email.value.$pristine)的属性,则 属性 似乎未定义。

我想避免将这些输入包含在 HTML 形式中。还有什么方法可以让我保留对这些属性的使用,如果可以,怎么做?

当您创建 <form> 元素时,它会创建一个带有表单名称的 $scope 变量。例如:

<form name="regForm">
  <div class="row">
    <div class="col-xs-3 align-right">
      <p>Email</p>
    </div>
    <div class="col-xs-7">
      <input type="text" class="form-control" name="email" ng-model="registrationForm.email.value"/>
      <span class="error-label" ng-hide="registrationForm.email.valid"><span class="glyphicon glyphicon-remove"></span>Must be a valid email!</span>
    </div>
  </div>
 </form>

您可以使用 $scope.regForm.email.$pristine 访问 $pristine

没有 <form>,只需使用 ng-form, which will give you the functionality of the form, without needing an actual <form> element. See this post 即可获得更多信息。