最简洁的方式来重置表单

Saf*_*lai 39 forms angular

在Angular 2最新版本中重置表单的最简洁方法是什么?我想在添加帖子后重置输入文本框.

@Component({
  selector: 'post-div',
  template: `
            <h2>Posts</h2>
            <form (submit)="addPost()">
                <label>Title: </label><input type="text" name="title" [(ngModel)]="title"><br/>
                <label>Body: </label><input type="text" name="body" [(ngModel)]="body"><br/>
                <input type="submit" value="Add Post">
            </form>
            <ul>
                <li *ngFor="let post of posts">
                    <strong>{{post.title}}</strong>
                    <p>{{post.body}}</p>
                </li>
            </ul>
          `,
  providers: [PostService]
});

addPost(){
    this.newPost = {
        title: this.title,
        body: this.body
    }
    this._postService.addPost(this.newPost);
}
Run Code Online (Sandbox Code Playgroud)

sma*_*c89 79

<form #myForm="ngForm" (ngSubmit)="addPost(); myForm.reset()"> ... </form>
Run Code Online (Sandbox Code Playgroud)

要么:

<form #myForm="ngForm" (ngSubmit)="addPost(myForm)"> ... </form>
Run Code Online (Sandbox Code Playgroud)
addPost(form: NgForm){
    this.newPost = {
        title: this.title,
        body: this.body
    }
    this._postService.addPost(this.newPost);
    form.reset(); // or form.resetForm();
}
Run Code Online (Sandbox Code Playgroud)

为那些无法完成上述工作的人添加另一个示例.

按下按钮:

<form #heroForm="ngForm">
    ...
    <button type="button" class="btn btn-default" (click)="newHero(); heroForm.reset()">New Hero</button>
</form>
Run Code Online (Sandbox Code Playgroud)

同样的事情适用于上面,您也可以选择将表单传递给ngForm函数.

  • 这不再起作用了.即使在角度样本 - > https://angular.io/guide/form-validation,如果您按下"重置新英雄"第二次它仍将显示"名称是必需的"验证错误??? 步骤是:按"新英雄",键入新值并再次按"新英雄".验证错误不应出现,因为表单已重置??? (5认同)
  • 重置将清除整个表单并将其状态恢复为原始状态(未激活验证),而resetForm将仅清除值而不更改状态,实质上是前几天的"textbox.clear"操作 (3认同)

Par*_*ain 16

清除表单以及错误状态(脏,原始等)的最简单,最干净的方法

this.formName.reset();
Run Code Online (Sandbox Code Playgroud)

有关表格的更多信息,请阅读此处

PS:当你问一个问题时,你的问题代码中没有使用任何形式你使用ngModel使用简单的两天数据绑定,而不是formControl.

form.reset() 该方法仅适用于formControls重置调用


Piz*_*ato 10

在 Angular 13 中添加了一个有趣的功能:创建表单控件时可以使用该initialValueIsDefault选项,因此在使用时reset()表单的值将被设置为其初始值。

我发现这对于更大的表单非常有用,如果您有重置按钮或类似的逻辑。

有关更多信息,请参阅 GitHub 上的功能 PR:https ://github.com/angular/angular/pull/44434

更新

initialValueIsDefault选项已被弃用。nonNullable代替使用。查看文档以获取更多信息: https ://angular.dev/api/forms/FormControlOptions


Pra*_*sne 8

清除表格的最简单方法

<form #myForm="ngForm" (submit)="addPost();"> ... </form>
Run Code Online (Sandbox Code Playgroud)

然后在.ts文件中你需要访问模板的局部变量即

@ViewChild('myForm') mytemplateForm : ngForm; //import { NgForm } from '@angular/forms';
Run Code Online (Sandbox Code Playgroud)

重置值和状态(原始,触摸..)执行以下操作

addPost(){
this.newPost = {
    title: this.mytemplateForm.value.title,
    body: this.mytemplateForm.value.body
}
this._postService.addPost(this.newPost);
this.mytemplateForm.reset(); }
Run Code Online (Sandbox Code Playgroud)

这是清除表单最清洁的方法


小智 7

通过转换HTML元素,使用简单的HTML和javascript来完成此操作,以避免打字稿错误

<form id="Login">

并在component.ts文件中,

clearForm(){
 (<HTMLFormElement>document.getElementById("Login")).reset();
}
Run Code Online (Sandbox Code Playgroud)

clearForm()可以根据需要在任何地方调用该方法.