Angular2反应形式,原始状态下的FormControl默认值

问题描述:

我创建了一个表单,允许用户通过单击按钮添加其他文本输入。这些输入后面的FormControl存储在FormGroup内的FormArray中。Angular2反应形式,原始状态下的FormControl默认值

我想为这些输入提供一个默认值,如果它们是原始的,那么这些输入将被提交。如果用户更改输入的值,将其更改为脏,我不希望提交或显示默认值。

我目前正在显示像这样的输入,因为占位符属性完全符合我的要求,仅当输入未被更改时显示默认名称。

<div 
    formArrayName="names" 
    *ngFor="let server of names.controls; let i = index; trackBy:trackByFn"> 
     <span>{{ i + 1 }}</span> 
     <input 
     type="text" 
     formControlName="{{i}}" 
     placeholder="{{defaultName}}"> 

</div> 

为了验证我已经创建了下面的验证功能名称:

export function validateServerName(form: FormGroup): ValidationErrors | null { 
    const names: string[] = form.value[CREATE_FORM_KEY_NAMES]; 

    for (const name of names) { 
     if (name.trim() === '') { 
      return { 
       invalidName: true 
      }; 
     } 
    } 

    return null; 
} 

在这里,我遇到了问题搞清楚,如果该元素是脏的还是原始的,因为form.value[key]只返回一个字符串数组,而不是一个FormControls的数组。

我正在寻找一种更简单的方式来完成我想要实现的功能,或者正确验证窗体的方法。

+1

您可以用'form.get( '控件名称')' –

+0

你使用formBuilder? –

+0

否@RIYAJKHAN,建立在表单构建器尚未存在时创建的旧代码 – Marv

您可以检查使用

控制状态,触摸时是真的,那么它的脏

this.form.get('controlname').touched 

和质朴的,您可以检查像

this.form.get('controlname').pristine 

UPDATE

对于表单数组,这将是somethi NG像

let val = this.user.get('<FormArray>') as FormArray; 
    console.log(val.at(index)); 

您现在可以使用pristinetouched此变量

+0

我需要访问'FormArray'中的控件,您的答案有助于我找到解决方案,但是您可能需要更新它当我接受你的答案时,上下文是正确的。 – Marv

+1

@Marv更新请看,这是我觉得 –