当action属性存在时,AngularJS表单验证

时间:2017-01-06 19:10:34

标签: angularjs chargify

我正在使用AngularJS并且有一个我需要POST数据的供应商。提交后,他们会将用户重定向回我的网站。

<form method="post" action="https://api.chargify.com/api/v2/signups">
  <input type="hidden" name="secure[api_id]"    value="1234" />
  <input type="hidden" name="secure[timestamp]" value="1301148971" />
  <input type="hidden" name="secure[nonce]"     value="5b2763d0-39e1-012e-858d-64b9e8d3946e" />
  <input type="hidden" name="secure[data]"      value="one=uno&amp;two=dos" />
  <input type="hidden" name="secure[signature]" value="412951d095ebbb3800dfb2126fe5073d2ab6c260" />
</form>

See Chargify Direct Signups for more info

他们没有CORS设置,因此我无法使用$ http服务发布数据。看来我必须用老式的形式来做这件事。我遇到了角度验证和预防表单提交的问题。显然是棱角分明ignores the result of the ng-submit when an action attribute is present

  

此外,它会阻止默认操作(表单意味着将请求发送到服务器并重新加载当前页面),但前提是表单不包含操作,数据操作或x-action属性。

对于HTML5浏览器验证,验证过于复杂,因此如果数据无效,我确实需要访问以阻止表单提交。我有点坚持这个。这似乎应该是一个容易解决的问题,但到目前为止,一个体面的解决方案已经回避了我。还有其他人解决了这个问题,还是我错过了一些明显的东西?

我做了一个验证简化的plunker来证明这个问题:

http://plnkr.co/edit/p83VEFwJVbRjOoggfNpb?p=preview

1 个答案:

答案 0 :(得分:0)

这感觉有点hacky,但我已经在它上面撒了一点jQuery,直到我找到更多的AngularJS解决方案:

  $("#billingForm").submit(function(e){
    var valid = $scope.billingForm.$valid;
    if (valid) {
      return true;
    }
    else {
      e.preventDefault();
      return false;
    }
  });