0

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

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

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

  // 更改控制器中的模型会更新字段
  // 但是 `required` 指令不会运行。
  $scope.populateValid = 函数 () {
     $scope.testField = '是的,是的,是的';
  }

第二种选择:http: //jsfiddle.net/R3b7Y/

  // ngModel API 的 `$setViewValue()` 更新模型
  // 但是双向绑定似乎失败了
  $scope.populateValid = 函数 () {
     $scope.testForm.testField.$setViewValue('是的,是的,是的');
  }

我怎样才能使这两件事都发生,即用文本更新字段,然后立即运行验证?

我已经阅读了一些地方,$parsers$formatters我无法理解如何在这种情况下使用它们——许多讨论都是根据自定义验证指令来讨论它们的。

4

1 回答 1

3

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

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

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

ng-valid 和 ng-dirty 是互补的,因此它们可以根据需要一起使用或单独使用。如果您像以前一样一起使用它们,那么您就是在对它们进行与运算。模型必须有效且脏才能匹配第二条规则。但是在您的情况下,您只想显示模型已经过验证,因此请从第二条规则中删除 ng-dirty。

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

于 2013-08-22T17:45:02.833 回答