在angularjs中将表单设置为无效

时间:2014-01-14 10:43:12

标签: angularjs

我需要在开始时将ng-form设置为无效,因为它是向导的后续部分。表单包含带元素的网格。每个元素都有自己的验证,但问题是当没有元素时表单显示为有效。当行数为0时,我需要将它标记为无效。如何做到这一点?

2 个答案:

答案 0 :(得分:19)

经过一些研究,下面的代码对我来说很好。在控制器中:

//Set the form as invalid for start.
  $timeout(function(){
   $scope.orderForm.productsForm.$invalid = true;
  });

超时确保我们可以访问表单。它们不是在第一次通过控制器时构建的,因此需要超时或监视。 然后我们将表单标记为无效。更好的方法是使用ngModelController上的文档api $setValidity来定位我们可以标记为无效的输入,但在我的用例中还没有输入,所以我们以脏的方式进行。

有一点需要注意的是,当一个人像上面那样直接设置相应的$ invalid ===!有效的不变量被破坏了,所以要小心这个黑客。

答案 1 :(得分:5)

我认为以下是一个更清洁的解决方案。

$scope.$watch('myForm', function (a, b) {
    $scope.myForm.$setValidity('custom', false, window); // 'custom' validation key, binds window as form control
});

我更喜欢$watch;最初,我打算检查"表格是否已经创建",然后才设置有效性。

但似乎并不是真的需要,表格是在$ watch执行初始时间之前创建的(所以手表没有变化)。

$setValidity似乎是ngForm API的一部分(我在form.js源代码中找到了它),它由表单控件本身使用,它们都设置$ valid和$无效。