代码之家  ›  专栏  ›  技术社区  ›  expenguin

角材料垂直步进器单一形式。重置()功能不正常

  •  0
  • expenguin  · 技术社区  · 6 年前

    我一直在为我的一个网页开发一个步进元素,并试图实现 .reset() 使用材料设计文档将表单恢复为空白状态的功能( https://material.angular.io/components/stepper/overview )

    下面是多表单组的例子,我可以看到,通过将您放回到第一步并清除表单,reset可以正确地工作。但是,在尝试使用单窗体结构时,我发现 stepper.reset() 返回到第一步,但不清除窗体。

    我试着将重置按钮标记为 Type="button" 由于单个表单要求在“下一步”和“上一步”按钮上单击以防止表单提交,但没有看到任何更改。

    我希望在单击重置时两个操作都发生,但是我不确定是否需要编写手动重置功能,或者我的代码中是否只存在错误。

    对此,任何帮助都将不胜感激。谢谢!

    创建.component.html

    <form [formGroup]="formGroup" class="content-container" (ngSubmit)="onSubmit()">
      <h1>{{title}}</h1>
      <mat-vertical-stepper #stepper>
        <mat-step formGroupName="someFieldGroup" [stepControl]="someFieldGroup">
          <ng-template matStepLabel>Fill out Field</ng-template>
          <mat-form-field>
            <input matInput placeholder="Some Field" formControlName="someFieldCtrl" name="someFieldName" required>
            <mat-error>This field is required</mat-error>
          </mat-form-field>
          <div>
            <button type="button" mat-button matStepperNext>Next</button>
          </div>
        </mat-step>
        <mat-step formGroupName="anotherFieldGroup" [stepControl]="anotherFieldGroup">
          <ng-template matStepLabel>Fill out Field</ng-template>
          <mat-form-field>
            <input matInput placeholder="Another Field" formControlName="anotherFieldCtrl" name="anotherFieldName" required>
            <mat-error>This field is required</mat-error>
          </mat-form-field>
          <div>
            <button type="button" mat-button matStepperPrevious>Back</button>
            <button type="button" mat-button matStepperNext>Next</button>
          </div> 
        </mat-step>
        <mat-step formGroupName="dropdownFieldGroup" [stepControl]="dropdownFieldGroup">
          <ng-template matStepLabel>Select Option</ng-template>
          <mat-form-field>
            <mat-select placeholder="Select Option" disableOptionCentering formControlName="dropdownFieldCtrl" name="dropdownFieldName" required>
              <mat-option value="1">One</mat-option>
              <mat-option value="2">Two</mat-option>
              <mat-option value="3">Three</mat-option>
              <mat-option value="4">Four</mat-option>
            </mat-select>
            <mat-error>This field is required</mat-error>
          </mat-form-field>
          <div>
            <button type="button" mat-button matStepperPrevious>Back</button>
            <button type="button" mat-button matStepperNext>Next</button>
          </div>
        </mat-step>
        <mat-step>
          <ng-template matStepLabel>Done</ng-template>
          You are now done.
          <div>
            <button type="button" mat-button matStepperPrevious>Back</button>
            <button type="submit" mat-button>Done</button>
            <button mat-button (click)="stepper.reset()">Reset</button>
          </div>
        </mat-step>
      </mat-vertical-stepper>
    </form>
    

    创建.component.ts

    import { Component, OnInit } from '@angular/core';
    import { FormGroup, FormControl } from '@angular/forms';
    
    //Type Imports
    import { Service } from '../service';
    import { Post } from './post';
    
    @Component({
      selector: 'app-create',
      templateUrl: './create.component.html',
      styleUrls: ['./create.component.css']
    })
    export class CreateComponent implements OnInit {
    
      title = 'Create';
    
      formGroup: FormGroup;
      post: Post = {} as Post;
    
      constructor(private service: Service) { }
    
      ngOnInit() {
        this.formGroup = new FormGroup({
          someFieldGroup: new FormGroup({
            someFieldCtrl: new FormControl(null)
          }),
          anotherFieldGroup: new FormGroup({
            anotherFieldName: new FormControl(null)
          }),
          dropdownFieldGroup: new FormGroup({
            dropdownFieldCtrl: new FormControl(null)
          })
        });
      }
    
      onSubmit() {
        this.post.someField = this.formGroup.get('someFieldGroup').get('someFieldName').value;
        this.post.anotherField = this.formGroup.get('anotherFieldGroup').get('anotherFieldName').value;
        this.post.dropdownField = this.formGroup.get('dropdownFieldGroup').get('dropdownFieldName').value;
    
        this.service.create(JSON.stringify(this.post)).subscribe(data => { console.log(data) });
      }
    }
    
    1 回复  |  直到 6 年前
        1
  •  2
  •   AbetotheMax    6 年前

    我也面临着这个问题。在步进器上调用重置似乎只会在第一步使您返回。如果您还调用表单本身的reset,那么表单字段应该清除。

    例子:

    <form [formGroup]="formGroup" class="content-container" (ngSubmit)="onSubmit() 
    #myFormGroup">
    ...
      <button mat-button (click)="myFormGroup.reset();stepper.reset()">Reset</button>
          </div>
        </mat-step>
      </mat-vertical-stepper>
    </form>
    
    推荐文章