在Angular 6的同一页面上是否可以具有功能不同的表单?

时间:2018-08-07 20:29:03

标签: angular angular-reactive-forms

我有一个反应式表单,其中包含页面/组件所需的所有数据。但是,我还想存储一些信息,这些信息不是主数据集的一部分,但仍需要作为组件的一部分进行存储。例如,我需要知道Widget X是否在库存中。如果是这样,我可以选择从库存中提取,也可以制作一个新的。我需要存储是否从清单中获取信息,但是该信息不应作为主数据集的一部分存储。

我知道我可以将所需的任何内容放入表单,然后将其删除,然后再将数据发送回服务器。这样做的问题是我希望有一个“保存”按钮,该按钮仅在表单脏了时才启用。如果有人更改了是否从清单中获取小部件,则会使表单变脏。因此,我要么需要一个单独的表单(但需要能够将其显示在主表单中),要么可以使某些控件不更改表单的“ dirty”属性。有可能吗?

希望这个问题是有道理的。我不想发布一堆不完全相关的代码。我正在使用Angular 6。

1 个答案:

答案 0 :(得分:0)

我不明白如何在同一页面上查看多种形式。换句话说,我认为您必须要做的事情仅限于一种形式:

<form [formGroup]="formOne">
    ...
</form>

但是,您可以根据需要使用任意多种形式(甚至来回切换),例如:

<div [formGroup]="formOne">
    ...
</div>
<div [formGroup]="formTwo">
    ...
</div>
<div [formGroup]="formOne">
    ...
</div>

您甚至可以对数组控件执行此操作。 (有关循环,请参见this question

<div *ngFor="let item of ' '.repeat(partsList.value.length).split(''); let i = index">
    <div [formGroup]="reqSupplemental.at(i)" fxLayout="row" fxLayoutGap="10px" fxLayoutAlign="start center">
        <button mat-mini-fab disabled style="color: white">{{partsList.value[i].orderNumber}}</button>
        ...
    </div>
</div>

其中reqSupplemental是在初始化组件时设置的FormArray(它包含组件所需的数据,但不需要保存)。 partsList返回一个FormGroup,它是确实需要保存的数据的一部分(但是在此处显示的部分中,它仅被引用,不能被修改)。

因此reqSupplemental中的数据不绑定到主数据表单,因此对其控件的更改不会使主表单变得“脏”。