如何强制Angular运行验证周期(内置验证)?

时间:2013-08-20 17:58:50

标签: angularjs

我需要更新文本字段的模型,然后激活验证以向用户显示它是有效条目的视觉反馈。

我尝试了两种方法,但我只能以牺牲另一种方式为代价来满足其中一项要求。

第一个选项http://jsfiddle.net/TZQjS/

  // changing the model in controller updates the field
  // but the `required` directive will not run.
  $scope.populateValid = function () {
     $scope.testField = 'yes, yes, yes';
  }

第二个选项http://jsfiddle.net/R3b7Y/

  // `$setViewValue()` of the ngModel API updates the model 
  // but two-way binding seems to fail
  $scope.populateValid = function () {
     $scope.testForm.testField.$setViewValue('yes, yes, yes');
  }

如何让这两件事情发生,即用文本更新字段,并在之后立即运行验证?

我在$parsers$formatters的地方读过,但我无法理解如何在这种情况下使用它们 - 很多讨论都是根据自定义验证指令来讨论它们。

1 个答案:

答案 0 :(得分:3)

验证在您的第一个选项中按预期触发,但您无法看到它,因为您的第二个CSS规则过于严格。你有:

input.ng-invalid.ng-dirty {
    background-color: #FA787E;
}

input.ng-valid.ng-dirty {
    background-color: #78FA89;
}

ng-valid和ng-dirty为complementary,因此可以根据需要一起使用或单独使用。如果你像现在一样使用它们,那么你就是他们。模型必须有效且脏,以匹配第二个规则。但在您的情况下,您只想显示模型已经过验证,因此从第二条规则中删除ng-dirty。

请注意,如果从两个规则中删除ng-dirty,则在用户输入任何内容之前,视图将显示无效。这不是我们通常想要的,所以这里是一个很好的例子,说明何时应该一起使用这些类。