在 Angular4 中提交隐藏表单

Don*_*ela 1 forms hidden http same-origin-policy angular

为了克服提交常规 HTTP 请求时遇到的 CORS(跨源请求共享)问题,我需要在 Angular 4 中提交一个隐藏表单。我在 HTML 中做到了这一点,没有任何问题。但是,我不知道如何在 Angular 中做到这一点。这是我的组件 html 中的代码:

  <form form #f="ngForm" action="https://whatever.site.I_access" method="get">
   <input type="hidden" name="scope" value="openid email">
   <input type="hidden" name="response_type" value="id_token token">
   <input type="hidden" name="client_id" value="myClientId">
   <input type="hidden" name="redirect_uri" value="https://my.redirect.com/">
   <input type="hidden" name="nonce" value="aNonceValue"> 

   <button type="submit" (click)="f.submit()">Submit</button>
 </form>
Run Code Online (Sandbox Code Playgroud)

在我的 .ts 文件中,我实现了“提交”功能。如果将其留空,则不会提交表单。在此函数中编写的命令是什么,只是为了提交具有指定操作的表单?

 onSubmit(){
 console.log("form submitted");
 }
Run Code Online (Sandbox Code Playgroud)

有什么线索吗?

And*_*ang 5

只要将表格附加到文档中,它就应该起作用:

  <form #form ngNoForm action="https://whatever.site.I_access" method="get">
   <input type="hidden" name="scope" value="openid email">
   <input type="hidden" name="response_type" value="id_token token">
   <input type="hidden" name="client_id" value="myClientId">
   <input type="hidden" name="redirect_uri" value="https://my.redirect.com/">
   <input type="hidden" name="nonce" value="aNonceValue"> 

   <button type="submit">Submit</button>
 </form>
Run Code Online (Sandbox Code Playgroud)

这将使 Angular 忽略该表单,因此它将是一个纯 HTML 表单。该按钮将触发其提交。

要以编程方式提交表单,请在组件上获取表单。form下面指的是#form上面。nativeElementHTMLFormElement.

 import { ..., ElementRef } from '@angular/core';
 ...
 @ViewChild('form') form: ElementRef;
 ...
 submitForm() {
   this.form.nativeElement.submit();
 }
Run Code Online (Sandbox Code Playgroud)

然后submitForm()有需要的时候打电话。

  • 这不是一个表格就能完成的。这是因为当提交表单时,上下文将被销毁并加载新的上下文。即使表单提交完成后有回调,也没有时间做任何事情。提交事件发生在表单实际发布之前。所以我想说看看 JSONP。您将发出一个 get 请求,该请求将返回 JavaScript 有效负载,该负载将通过您指定的名称调用函数。当然需要后台支持。 (2认同)