5

为了简化事情,我制作了一个示例表格来描述我的问题:

<form novalidate name="form">
  <input required name="foo" ng-model="my.foo">
</form>

还有一个控制器:

angular.module('sample', []).controller('MainController', function($scope) {
  $scope.$watch('form.$valid', function (valid) {
    console.log(valid);
  });
});

预期结果:

> false

实际结果:

> true
> false

谁能告诉我为什么表格一开始是有效的,然后变得无效(顺便说一句,它应该是什么)?

工作演示

4

1 回答 1

5

我实际上确定这是由于指令优先级。

在 angularJS<form>实际上是一个指令。required是另一个。

假设我们有一个没有验证的表单。表格始终有效。我很确定现在我们可以说一个表单默认是有效的。

“form”指令的优先级高于“required”。这意味着在某一点上。Angular 应用“表单”指令,而不是“必需”指令。这会产生一个有效的表单,其输入具有未知属性“必需”。下一个摘要将分析“必需”指令。它发现输入为空并将valid设置为false。

正如 Omri 所说,这是指令优先级和摘要周期的问题。

于 2015-05-19T17:18:20.427 回答