1. ホーム
  2. angular

[解決済み] Angular 2で送信後にフォームをクリアするには?

2022-10-01 21:49:49

質問

テンプレート付きのシンプルなangular 2コンポーネントを持っています。どのように送信後にフォームとすべてのフィールドをクリアするには?私はページを再読み込みすることはできません。 でデータを設定した後 date.setValue('') でデータを設定しても、フィールドは touched .

import {Component} from 'angular2/core';
import {FORM_DIRECTIVES, FormBuilder, ControlGroup, Validators, Control} from 'angular2/common';

@Component({
    selector: 'loading-form',
    templateUrl: 'app/loadings/loading-form.component.html',
    directives: [FORM_DIRECTIVES]
})

export class LoadingFormComponent {
    private form:ControlGroup;
    private date:Control;
    private capacity:Control;

    constructor(private _loadingsService:LoadingsService, fb:FormBuilder) {
        this.date = new Control('', Validators.required);
        this.capacity = new Control('', Validators.required);
        this.form = fb.group({
            'date': this.date,
            'capacity': this.capacity
        });
    }

    onSubmit(value:any):void {
        //send some data to backend
    }
}

load-form.component.html。

<div class="card card-block">
    <h3 class="card-title">Loading form</h3>

    <form (ngSubmit)="onSubmit(form.value)" [ngFormModel]="form">
        <fieldset class="form-group" [class.has-danger]="!date.valid && date.touched">
            <label class="form-control-label" for="dateInput">Date</label>
            <input type="text" class="form-control form-control-danger form-control-success" id="dateInput"
                   min="0" placeholder="Enter loading date"
                   [ngFormControl]="form.controls['date']">
        </fieldset>
        <fieldset class="form-group" [class.has-danger]="!capacity.valid && capacity.touched">
            <label class="form-control-label" for="capacityInput">Capacity</label>
            <input type="number" class="form-control form-control-danger form-control-success" id="capacityInput"
                   placeholder="Enter capacity"
                   [ngFormControl]="form.controls['capacity']">
        </fieldset>
        <button type="submit" class="btn btn-primary" [disabled]="!form.valid">Submit
        </button>
    </form>
</div>

どのように解決するのですか?

こちらもご覧ください https://angular.io/docs/ts/latest/guide/reactive-forms.html (セクション "フォームフラグのリセット")を参照してください。

>=RC.6

RC.6では、フォームモデルを更新することがサポートされるはずです。新しいフォームグループを作成し、それを myForm

[formGroup]="myForm"

もサポートされます ( https://github.com/angular/angular/pull/11051#issuecomment-243483654 )

RC.5

form.reset();

新しいフォームモジュール(>= RC.5)では NgForm には reset() メソッドを持ち、さらにフォーム reset イベントをサポートします。 https://github.com/angular/angular/blob/6fd5bc075d70879c487c0188f6cd5b148e72a4dd/modules/%40angular/forms/src/directives/ng_form.ts#L179

<=RC.3

これでうまくいきます。

onSubmit(value:any):void {
  //send some data to backend
  for(var name in form.controls) {
    (<Control>form.controls[name]).updateValue('');
    /*(<FormControl>form.controls[name]).updateValue('');*/ this should work in RC4 if `Control` is not working, working same in my case
    form.controls[name].setErrors(null);
  }
}

参照