我需要更新文本字段的模型,然后激活验证以向用户显示它是有效条目的视觉反馈。
我尝试了两种方法,但我只能以牺牲另一种方式为代价来满足其中一项要求。
第一个选项: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
的地方读过,但我无法理解如何在这种情况下使用它们 - 很多讨论都是根据自定义验证指令来讨论它们。
答案 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,则在用户输入任何内容之前,视图将显示无效。这不是我们通常想要的,所以这里是一个很好的例子,说明何时应该一起使用这些类。