时间问题?还是代码结构?

时间:2015-03-24 19:45:53

标签: javascript angularjs performance timing

我有以下代码段...

$scope.submitForm = function(){ // called when form button clicked.
    if( $scope.formStatus.disabled || $scope.validationForm.$invalid ){ return; } // Doesn't allow multiple button clicking when button is in disabled state.
    submitFormForValidation();
  };

每隔一段时间,非常好,以至于我只看到过一次,但听说它在野外发生了三次,上面的代码将执行submitFormForValidation()函数,即使表单本身无效。

我正在使用Angularjs 1.3.0.beta-8。

通常,当任何所需输入中没有值时,表单将不会提交。如果我输入一个值,然后将其删除,表单将提交(但就像我很少说的那样,我没有运气重新创建问题,除非我硬编码一个setTimeout并假装,这个接缝重新创建了这个问题。

我想也许这可能是由于我构建代码的方式,但是当我想到它时,也许Angular /浏览器陷入了足够的时间,表单在输入输入时仍然有效,并且没有更新$ invalid属性,直到commitForm函数运行。因此,表格被欺骗仍然有效。

由于我很难在野外见证这一点,因为它非常罕见,我假设它是由于Angularjs没有更新表单验证,然后它将永远不会退出函数并运行submitFormForValidation();

以下是我的问题......

  1. 编写代码的方式有什么不正确吗?
  2. 我使用的Angularjs版本在摘要周期中运行速度较慢,还是运行形式的验证更改?
  3. 升级到Angularjs 1.3+(任何稳定分支)会在更改检测中提供更一致的速度吗?
  4. 同样,此代码在大约99%的时间内工作4.0。但是,我确实需要100%的时间。

    我还想了解为什么会发生这种情况,因为我认为设置一个setTimeout()更像是一个绑定修复,如果超时不够长,它仍然可能会失败。

    更新 如果我可以添加......

    用户填写两个输入,FORM为VALID,可以提交。

    当它破裂时,

    用户填写两个输入,然后删除一个直到空。就Angular而言,FORM仍然是有效的,因此该函数不会返回,从而触发submitFormForValidation()函数。

    我终于重新创造了这个,但只有一个小时。在控制台中,当在控制台中查看表单和输入时,我可以看到仅为其中一个输入设置了ng-valid和ng-invalid,但另一个输入没有任何改变。这就像失去了与Angular的联系。

    因此表单将按照编码提交和行为,但仅取决于工作输入是否有效,损坏的输入无关紧要。

    我目睹了这两种输入都发生了这种情况,所以它并不特定于输入。

0 个答案:

没有答案