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