如何标记ngFor循环中的哪些对象是“脏”的?

时间:2018-09-25 20:41:38

标签: angular angular2-forms

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

    <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 /编辑/更改的对象才发送回服务器。(又名,输入已被用户更改)

我也理解我可以使用表格来查找单个输入是否脏了,但是我希望有一种方法可以在对象级别上做到这一点。 因此,换句话说,如果该对象中的任何字段都是脏的,则整个对象都是脏的,应将其返回给服务器。

2 个答案:

答案 0 :(得分:1)

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

html:

模板:

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

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

答案 1 :(得分:1)

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

#form="ngForm"添加到您的form标记中。然后通过@ViewChild() form: NgForm,您可以获取对表格的引用。然后,您可以列出所有字段并按特定属性对其进行过滤。

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