您如何标记 ngFor 循环中的哪些对象是 'dirty'?

How can you flag which OBJECTS in an ngFor loop are 'dirty'?

我有以下代码可以将对象列表放到页面上:

    <tr *ngFor="let setting of settings; let i = index;">
            <td>{{setting.section}}</td>
            <td>{{getTenantName(setting.tenant)}}</td>
            <td>{{setting.name}}</td>
            <td *ngIf="!setting.restWritable">
              <span>{{setting.value}}</span>
            </td>
        <td *ngIf="setting.restWritable && !setting.secret">
          <input class="form-control" [name]="'Value' + i" [(ngModel)]="setting.value" />
        </td>
      </tr>

而且我有一个要求,只有 DIRTY/编辑/更改的对象被发送回服务器..(也就是输入已被用户更改)

我也知道我可以使用表单来查明单个输入是否有问题,但我希望有一种方法可以在 OBJECT 级别执行此操作。 所以换句话说,如果该对象中的任何字段是脏的,则整个对象都是脏的,应该返回给服务器。

您可以使用@ViewChild 来访问组件中的表单对象,或者更好的解决方案是使用反应式表单,您可以在其中访问整个表单。并且您需要使表单控件名称不同才能在表单对象中具有不同的控件

html:

模板:

@ViewChild('someForm') myForm: NgForm 现在您可以访问 myForm.dirty

作为一个小例子,我分叉了 angular 模板驱动的表单: https://stackblitz.com/edit/angular-fu35pz-vlr7bm?file=src%2Fapp%2Fhero-form%2Fhero-form.component.html

如果您通过 ngFor 指令生成表单控件,则您使用的是模板驱动表单。

#form="ngForm" 添加到您的 form 标签。然后通过 @ViewChild() form: NgForm 您可以获得对您的表格的引用。然后您可以列出所有字段并按特定属性过滤它们。

唯一的技巧是您必须为模板中的每个控件生成唯一的 ID 和名称。