【问题标题】:How to submit a dynamically created form in Angular如何在 Angular 中提交动态创建的表单
【发布时间】:2020-04-15 10:01:19
【问题描述】:

我有一个包含许多通过绑定动态创建的输入字段的表单:

<form method="post" (ngSubmit)="onSubmit()">
<div class="row">
  <div *ngFor="let p of Model.products" class="col-lg-2 col-md-4 col-sm-6" style="text-align:center">
    <p>{{p.name}}</p>
    <input name="stock:{{p.id}}" value="{{p.stock}}" type="text" class="form-control" autocomplete="off" onkeypress="return event.charCode >= 48 && event.charCode <= 57" />
    <img src="{{p.imgPath}}" style="max-width:120px" />
  </div>
</div>
<div style="text-align:right">
  <button type="submit" class="btn btn-outline-primary">Submit</button>
</div>
  </form>

由于我事先不知道输入的名称,我该如何提交此表单。 我的 onSubmit() 事件处理程序中应该包含什么?

这是组件的代码:

import { Component, Inject, OnInit } from "@angular/core";
import { HttpClient } from "@angular/common/http";
import { AuthService } from "../services/auth.service";

@Component({
  selector: "admin-stocks",
  templateUrl: "stocks.component.html"
})

export class AdminStocksComponent implements OnInit{
  Model: ProductListModel;
  IsAdministrator: boolean = false;
  constructor(@Inject("BASE_URL") private baseUrl: string, private http: HttpClient,
                 private authService: AuthService) { }

  ngOnInit() {
    this.authService.isAdministrator().subscribe(res => this.IsAdministrator = res,
      error => console.error(error));

    var url = this.baseUrl + "api/ajax/GetProducts";
    this.http.get<ProductListModel>(url).subscribe(res => { console.log(res); this.Model = res; },
      error => console.error(error));
  }
  getPagesArray(n) {
    return new Array(n);
  }
  onSubmit(e) {
    console.log(e);

  }
}

【问题讨论】:

  • 代码中缺少许多有用的信息:您是否在某个时候更新Model.products?你应该如何调用服务器?传统的 url 编码的 HTTP Post 还是 Ajax 调用?尝试描述您要发送的数据的“形状”。没有这些信息,我们无法知道答案应该是什么样子。
  • 我正在使用 httpclient 获取更新 onInit 中的对象模型。我想通过发布请求使用 httpclient 调用服务器。我要发送的数据是包含在字典键值中的表单本身,其中键是产品的 id,值是产品的库存,即表单输入的值
  • 我会用组件的代码更新问题。

标签: angular forms


【解决方案1】:

您只需将类型为 submit 的按钮放在表单标签内,这样当按钮单击时,提交事件将触发,如果您想要访问表单数据,您可以创建一个 ngForm 指令的引用

例子

<form #form="ngForm" (ngSubmit)="onSubmit(form.value)">
    <input type="text" name="userName" ngModel>
    <button type="submit"> submit</button>
</form>

动态表单控件示例并通过ngModel设置初始值

<form #form="ngForm" (ngSubmit)="onSubmit(form.value)">
 <input 
    *ngFor="let p of controls" 
     type="text" 
     [name]="p.id" 
     [ngModel]="p.value">
  <button type="submit"> submit</button>
</form>

demo ?

看看这个?Angular Form ✨很有帮助

【讨论】:

  • 如果我将 ngModel 添加到该字段,它的绑定值就会消失
  • 你可以像[ngModel]="p.value"这样设置初始值,一切都会正常
  • 我现在看到它可以工作了,但是我在 onSubmit 中获得了什么样的对象。是表格数据吗?我可以将其发布到控制器然后作为表单数据接收吗?
  • 你得到的值是表单输入 any 的基础,而 fomm 控制键将是 name 属性的基础
  • 如何遍历 form.value 以获得密钥对字典。我试过 (var key in f.value) { console.log(key); } 这给了我键而不是值
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2011-12-21
  • 2021-05-11
  • 1970-01-01
  • 2013-01-27
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多