forms - Angular 2 : Using dynamic inputs in reactive forms

标签 forms angular

我有一个 Angular 2 应用程序,它在整个应用程序中大量使用表单。大多数表单都是使用 Angular 中的响应式(Reactive)表单模块构建的,但我使用的 API 也有很多“动态字段”。

例如,“后端”允许用户为某些帖子/页面创建自定义字段,我也想为用户提供在我的 Angular 2 应用程序中使用它们的能力。

示例

API 给了我一个 JSON 列表,如下所示:

{
    "id": "the-custom-field-id",
    "label": "The input label",
    "min": 4,
    "max": 8,
    "value": "The current value of the custom field"
},
...

现在,我获取可观察对象中的自定义字段列表,并使用 ngfor 循环它们并为每个条目生成表单元素,如下所示:

<div *ngFor="let cf of _customFields" class="form-group">

    <label>{{cf.label}}</label>

    <input id="custom-field-{{cf.id}}" type="text" class="form-control" value="{{cf.value}}">

</div>

然后在提交时,我进入 DOM(使用 jQuery)以使用自定义字段的“ID”获取值。

这很丑陋并且违背了不混合 jQuery 和 Angular 的想法。

必须有一种方法将这些动态表单集成到 Angular 中,以便我可以将它们与控制组和验证规则一起使用吗?

最佳答案

是的,确实有。查看Angular 2's Dynamic Forms .它的基本要点是您创建类的(问题),它为您希望访问的每种类型的表单控件定义了选项。因此,例如,作为最终结果,您可能会得到如下内容:

private newInput;

constructor(){
    // typically you would get your questions from a service/back-end.

    this.newInput = new NumberQuestion({
        key: 'amount',
        label: 'Cash Back',
        value: 21,
        required: true,
        max: 1000,
        min: 10
    });
}

ngOnInit(){
    let control = this.newInput.required ? 
        new FormControl(this.newInput.value, Validators.required)
        : new FormControl(this.newInput.value);

    this.form.addControl(this.newInput.key, control);
}

关于forms - Angular 2 : Using dynamic inputs in reactive forms,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39910191/

相关文章:

javascript - jQuery 无法完成提交并在地址中添加参数

jQuery serializeArray 没有获取动态创建的表单元素

javascript - Angular 2 (click) 和 (dblclick) 在同一个元素上效果不佳?

angular - 组件和指令有什么区别?

angular - *ngFor 循环遍历数组 Angular6

mysql - 如何使用 Mysql Node.js 在 *ngFor 循环内使用 *ngIf 条件显示默认空值按钮,不喜欢和默认按钮

javascript - TypeScript 编译上下文中包含 app.component.ts 的错误

reactjs - 如何显示自动完成错误

forms - 如何为同一个 MailChimp 列表设置不同的注册表单?

javascript - NODE.JS:当表单提交时出现后端错误时,如何让前端 JS 事件监听器?