【问题标题】:Set form as invalid in angularjs在angularjs中将表单设置为无效
【发布时间】:2014-01-14 10:43:12
【问题描述】:

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

【问题讨论】:

  • 当该问题没有标记答案并且提供了不可能做到这一点的状态时,这怎么可能重复?虽然这样做显然是可能的,但我在答案中证明了这一点。这就是为什么这个问答在这里。所以人们可以找到它。

标签: angularjs


【解决方案1】:

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

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

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

需要注意的是,当你直接设置它时,就像上面相应的 $invalid === ! $valid 不变量被破坏,所以要小心这个 hack。

【讨论】:

    【解决方案2】:

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

    $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 和 $invalid 的表单控件本身使用。

    【讨论】:

      猜你喜欢
      • 2018-12-20
      • 1970-01-01
      • 2018-07-08
      • 2017-10-06
      • 2016-09-22
      • 1970-01-01
      • 2014-11-07
      • 2018-03-11
      • 1970-01-01
      相关资源
      最近更新 更多