重置角电抗形式不包括特定字段

时间:2019-02-20 09:45:28

标签: angular typescript angular-reactive-forms

with reference(strncpy()),我在表单中有20个字段,如果用户单击重置选项,我需要重设表单,但排除2个字段,如果正在使用this.form.reset()表示它重置了所有内容,任何帮助表示赞赏

6 个答案:

答案 0 :(得分:1)

您可以遍历FormGroup的控件,并且如果控件名称与排除列表中的控件名称匹配,则无需重置它:

const exclude: string[] = ['formControlName1', 'formControlName2'];

Object.keys(this.form.controls).forEach(key => {
   if (exclude.findIndex(q => q === key) === -1) {
       this.form.get(key).reset();
   }
});

答案 1 :(得分:1)

您可以为重置功能提供重置值。只需将两个字段的值赋给它,其余的应该为空。

public class Product
{
    public string Name { get; set; }
    public int Price { get; set; }
}

private async void Form1_Load(object sender, EventArgs e)
{
    // Define list
    var list = new List<Product>();

    // Fill data
    list.Add(new Product { Name = "Product 1", Price = 100 });
    list.Add(new Product { Name = "Product 2", Price = 200 });

    // Set data source of data grid view
    var bs = new BindingSource();
    bs.DataSource = list;
    this.dataGridView1.DataSource = bs;

    // Automatically update text box, by SUM of price
    textBox1.Text = $"{list.Sum(x => x.Price):F2}";
    bs.ListChanged += (obj, args) =>
        textBox1.Text = $"{list.Sum(x => x.Price):F2}";
}

答案 2 :(得分:1)

您可以使用Key作为formControl,将value作为您希望控件在重置时具有的值,将对象传递给reset函数。

this.form.reset({
  fomrControl1:value1,
  formControl2:value2
});

如果要更改字段的行为(例如禁用或启用),只需传入一个Object而不是一个值即可。例如:

this.form.reset({
  fomrControl1:{value:value1, disabled:true}, // disables this field on reset
  formControl2:value2
});

答案 3 :(得分:0)

只需查看onReset()方法。此代码将重置namedescription字段以外的所有内容

formGroup: FormGroup = /* init the formGroup... */

onReset() {
    this.formGroup.reset({
        name: this.formGroup.get('email').value, 
        description: this.formGroup.get('description').value
    });
}

Stackblitz repro

答案 4 :(得分:0)

我将保留这两个输入值,重置表格,然后再次对这两个输入进行修补。

const keepValues = [
   this.form.controls.keepThis1.value,
   this.form.controls.keepThis2.value,
];
this.form.reset();
this.form.controls.keepThis1.patchValue(keepValues[0]);
this.form.controls.keepThis2.patchValue(keepValues[1]);

答案 5 :(得分:0)

嘿,让函数reset() 并使用以下语法重置18字段。

 resetForm(){

    this.form.controls.formField1.reset("");
    this.form.controls.formField2.reset("");
    .
    .
    this.form.controls.formField18.reset("");
 }

谢谢。