微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

提交后重新设置角度2中的表单

我知道Angular 2目前没有办法轻松地将表单重置为原始状态.在我周围找到一个解决方案,像下面的那样重置表单域.

有人建议,我需要删除控制组,并创建一个新的,以重建表单为原则.我很难弄清楚最好的方式来做到这一点.我知道我需要在一个函数中包装表单,但是在构造函数中这样做时我遇到错误.

什么是重建控制组以完全重置表单的最佳方式?

class App {

    name: Control;
    username: Control;
    email: Control;

    form: ControlGroup;

    constructor(private builder: FormBuilder) {

        this.name = new Control('',Validators.required);
        this.email = new Control('',Validators.required);
        this.username = new Control('',Validators.required);

        this.form = builder.group({
            name: this.name,email: this.email,username: this.username
        });
    }

    onSubmit(value: any): void {  
        // code that happens when form is submitted
        // then reset the form
        this.reset();
    }

    reset() {
        for (let name in this.form.controls) {
            this.form.controls[name].updateValue('');
            this.form.controls[name].setErrors(null);
        }
    }
}

解决方法

RC.6

支持重置表单并保持提交状态.

console.log(this.form.submitted);
this.form.reset()

要么

this.form = new FormGroup()...;

更新

要更新一些仅在创建表单时初始化的内容,需要进行一些额外的测量

<form *ngIf="showForm"

  showForm:boolean = true;
  onSubmit(value:any):void {
    this.showForm = false;
    setTimeout(() => {
    this.reset()
      this.showForm = true;
    });
  }

Plunker example

原始< = RC.5
只需将创建表单的代码移动到一个方法,并在处理提交后再次调用它:

@Component({
  selector: 'form-component',template: `
    <form (ngSubmit)="onSubmit($event)" [ngFormModel]="form">
       <input type="test" ngControl="name">
       <input type="test" ngControl="email">
       <input type="test" ngControl="username">
       <button type="submit">submit</button>
    </form>
    <div>name: {{name.value}}</div>
    <div>email: {{email.value}}</div>
    <div>username: {{username.value}}</div>
`
})
class FormComponent {

  name:Control;
  username:Control;
  email:Control;

  form:ControlGroup;

  constructor(private builder:FormBuilder) {
    this.createForm();
  }

  createForm() {
    this.name = new Control('',Validators.required);
    this.email = new Control('',Validators.required);
    this.username = new Control('',Validators.required);

    this.form = this.builder.group({
      name: this.name,username: this.username
    });
  }

  onSubmit(value:any):void {
    // code that happens when form is submitted
    // then reset the form
    this.reset();
  }

  reset() {
    this.createForm();
  }
}

Plunker example

原文地址:https://www.jb51.cc/html/230401.html

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。

相关推荐