提交后在Angular 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);
        }
    }
}
贡特·佐赫鲍尔(GünterZöchbauer)

> = RC.6

支持重置表格并保持submitted状态。

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

或者

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

导入的更新

要将表单控件设置为创建表单时的状态(例如验证器),需要进行一些附加的度量

在表单(html)的视图部分中,添加一个*ngIf以显示或隐藏表单

<form *ngIf="showForm"

在表单(* .ts)的组件侧执行此操作

  showForm:boolean = true;

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

这是一个更详细的示例:

export class CreateParkingComponent implements OnInit {
  createParkingForm: FormGroup ;
  showForm = true ;

  constructor(
    private formBuilder: FormBuilder,
    private parkingService: ParkingService,
    private snackBar: MatSnackBar) {

      this.prepareForm() ;
  }

  prepareForm() {
    this.createParkingForm = this.formBuilder.group({
      'name': ['', Validators.compose([Validators.required, Validators.minLength(5)])],
      'company': ['', Validators.minLength(5)],
      'city': ['', Validators.required],
      'address': ['', Validators.compose([Validators.required, Validators.minLength(10)])],
      'latitude': [''],
      'longitude': [''],
      'phone': ['', Validators.compose([Validators.required, Validators.minLength(7)])],
      'pictureUrl': [''],
      // process the 3 input values of the maxCapacity'
      'pricingText': ['', Validators.compose([Validators.required, Validators.minLength(10)])],
      'ceilingType': ['', Validators.required],
    });
  }

  ngOnInit() {
  }


  resetForm(form: FormGroup) {
    this.prepareForm();
  }

  createParkingSubmit() {
    // Hide the form while the submit is done
    this.showForm = false ;

    // In this case call the backend and react to the success or fail answer

    this.parkingService.create(p).subscribe(
      response => {
        console.log(response);
        this.snackBar.open('Parqueadero creado', 'X', {duration: 3000});
        setTimeout(() => {
          //reset the form and show it again
          this.prepareForm();
            this.showForm = true;
          });
      }
      , error => {
        console.log(error);
        this.showForm = true ;
        this.snackBar.open('ERROR: al crear Parqueadero:' + error.message);
      }
      );
  }
}

柱塞示例

原始<= 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,
      email: this.email,
      username: this.username
    });
  }

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

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

柱塞示例

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

如何在提交ANGULAR 2中重置表单验证

来自分类Dev

表单提交后如何在angular js中重置表单字段

来自分类Dev

提交表单后如何在angular js中重置表单字段

来自分类Dev

提交后重置ReactJS表单

来自分类Dev

提交表单后重置表单字段

来自分类Dev

表单提交后的Angular JS Root范围

来自分类Dev

表单提交后的Angular JS Root范围

来自分类Dev

表单提交后呈现不同的组件Angular

来自分类Dev

提交表单后Angular 2显示验证错误

来自分类Dev

提交后如何在Angular中异步验证表单?

来自分类Dev

提交后如何在Angular中异步验证表单?

来自分类Dev

在Angularjs中提交后重置表单

来自分类Dev

{React Native}提交后重置Formik表单

来自分类Dev

成功提交后重置表单字段

来自分类Dev

表单重置后禁用保存/提交按钮

来自分类Dev

在Angular2中提交表单后修改对象的变量值

来自分类Dev

Angular 2中的表单提交状态标志

来自分类常见问题

在Angular 2中提交后如何清除表格?

来自分类Dev

提交后重置表格

来自分类Dev

在symfony2中提交后修改表单值

来自分类Dev

在Phoenix LiveView中提交后重置表单输入字段

来自分类Dev

成功提交表单后,AngularJS reCaptcha不会重置

来自分类Dev

在 React 中提交表单后无法重置输入字段

来自分类Dev

在jquery中提交表单后如何重置引导模式?

来自分类Dev

保存 Angular 4 后重置表单

来自分类Dev

如何仅从HTML重置AngularJS帖子提交中的表单?

来自分类Dev

如何仅从HTML重置AngularJS帖子提交中的表单?

来自分类Dev

在以下代码中成功提交AngularJS后,如何清空(或重置)表单上的所有输入字段?

来自分类Dev

在angular 2表单中禁用默认的Dropdown值的提交按钮

Related 相关文章

热门标签

归档