为什么无效的表格一开始是有效的,然后马上就无效了?
Why does an invalid form is valid at first and right after turns out invalid?
为了简化事情,我制作了一个示例表格来描述我的问题:
<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
谁能告诉我为什么表格一开始是有效的然后就变得无效了(顺便说一句,它应该是什么)?
实际上我确定这是由于指令优先级。
在angularJS中<form>
实际上是一个指令。 required
是另一个。
假设我们有一个未经验证的表单。该表格始终有效。我很确定现在我们可以说默认情况下表单是有效的。
"form" 指令的优先级高于 "required"。这意味着在某个时刻。 Angular 应用 "form" 指令,而不是 "required" 指令。这会生成一个有效表单,其中输入的属性未知 "required"。下一个摘要将分析 "required" 指令。发现输入为空,设置valid为false。
正如 Omri 所说,这是一个指令优先级和摘要周期的问题。
为了简化事情,我制作了一个示例表格来描述我的问题:
<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
谁能告诉我为什么表格一开始是有效的然后就变得无效了(顺便说一句,它应该是什么)?
实际上我确定这是由于指令优先级。
在angularJS中<form>
实际上是一个指令。 required
是另一个。
假设我们有一个未经验证的表单。该表格始终有效。我很确定现在我们可以说默认情况下表单是有效的。
"form" 指令的优先级高于 "required"。这意味着在某个时刻。 Angular 应用 "form" 指令,而不是 "required" 指令。这会生成一个有效表单,其中输入的属性未知 "required"。下一个摘要将分析 "required" 指令。发现输入为空,设置valid为false。
正如 Omri 所说,这是一个指令优先级和摘要周期的问题。