angular - 如何动态创建表单并在 Angular 7 中提交?

标签 angular angular-forms

我需要先调用 API 获取一些值放在我的表单中然后提交它。我喜欢避免使用带有隐藏输入的表单并希望即时创建它。我的伪代码

submitMyform() {
  //first i call an API and get some data
  var mydata = this.http.get()...

 this.signForm = new FormGroup({
  'Name': new FormControl(mydata.name),
  'Age': new FormControl(mydata.age)   
 });

  this.signForm.submit() //Wished this method existed
}

我希望我的浏览器重定向到我提交表单的页面。

编辑:对不起..!我最关心的是如何提交这个表格。不获取数据并填充表单。我的代码只是一个模板..这是我缺少的 this.signForm.submit() 方法

最佳答案

你在这里做的错误是你无法访问 mydata 中的数据没有订阅它,因为 http.get()返回 Observable
您可以使用订阅

submitMyform() {
  //first i call an API and get some data
  var mydata = this.http.get()...
 mydata.subscribe((data) =>{
   this.signForm = new FormGroup({
    'Name': new FormControl(mydata.name),
    'Age': new FormControl(mydata.age)   
   });
   this.http.post('url', this.signForm);
 });
}

或异步/等待
async submitMyform() {
  //first i call an API and get some data
  var mydata = await this.http.get().toPromise();
  this.signForm = new FormGroup({
    'Name': new FormControl(mydata.name),
    'Age': new FormControl(mydata.age)   
  });
 this.http.post('url', this.signForm);
}

更新:

我已经尝试了几件事来在 Angular 中通过重定向发送 post 请求。但唯一对我有用的是创建隐藏的 <form>
为此,我创建了此方法
submitForm(action, method, formGroup: FormGroup) {
    const form = document.createElement('form');
    form.style.display = 'none';
    form.method = method;
    form.action = action;
    let input;
    for (const [key, value] of Object.entries(formGroup.value)) {
      input = document.createElement('input');
      input.name = key;
      input.id = key;
      input.value = value;
      form.appendChild(input);
    }
    document.body.appendChild(form);
      form.submit();
  }

这里最好的方法是在没有 appendChild() 的情况下提交它。但它会产生这个错误

Submit was canceled because form is no connected.

关于angular - 如何动态创建表单并在 Angular 7 中提交?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55122374/

相关文章:

html - 无法绑定(bind)到 'x',因为它不是 'input' Angular 2 的已知属性

angular - 如何将 'ngModel' 与表单控件名称一起使用?

javascript - 有没有办法将数据从我的 angular2 服务中的 .subscribe 传递出去?

javascript - Particles.js 没有粒子以 Angular 加载

html - 从动态表单内容 Angular 获取值

angular - 为什么我无法阻止用户编辑 PrimeNG 表单字段值?

Angular react 形式 : Debounce only some specific Form Control

angular - ngx-leaflet/Angular 2 中带有下拉选择输入的属性绑定(bind) map 单击事件

angular - 如何检测 angular2 中的引导日期时间选择器更改事件

angular - *NgFor 不显示数据