在Angular中访问没有表单的$ pristine输入属性?

时间:2016-08-26 10:36:54

标签: javascript html angularjs forms interaction

说我有以下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(I.E. registrationForm.email.value.$pristine),则该属性似乎未定义。

我想避免将这些输入括在HTML表单中。是否还有一种方法可以保留这些属性的使用,如果有,怎么做?

1 个答案:

答案 0 :(得分:1)

创建<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>

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

如果没有<form>,只需使用ng-form即可获得表单功能,而无需实际的<form>元素。有关详细信息,请参阅this post