我有以下代码将对象列表放到页面上:
<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 /编辑/更改的对象才发送回服务器。(又名,输入已被用户更改)
我也理解我可以使用表格来查找单个输入是否脏了,但是我希望有一种方法可以在对象级别上做到这一点。 因此,换句话说,如果该对象中的任何字段都是脏的,则整个对象都是脏的,应将其返回给服务器。
答案 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和名称。