Angular 2 FormControl.reset() 不起作用,但 .resetForm() 起作用(但打字稿错误)

Posted

技术标签:

【中文标题】Angular 2 FormControl.reset() 不起作用,但 .resetForm() 起作用(但打字稿错误)【英文标题】:Angular 2 FormControl.reset() doesn't work, but .resetForm() does (but typescript error) 【发布时间】:2017-11-18 10:03:47 【问题描述】:

在我的 Angular 2 表单中,我有以下打字稿:

export class UserEditComponent implements OnChanges 
    @Input() userModel: IUserModel;
    @Output() onSave: EventEmitter<IUserModel> = new EventEmitter<IUserModel>();

    @ViewChild("userEditForm") userEditForm: FormControl;

    private userNameIsValid = true;

    constructor(private httpService: HttpService) 
    

    ngOnChanges (changes: SimpleChanges) 
        this.userEditForm.resetForm();
        console.log(this.userEditForm);
    

    ....

和模板html

<form class="form-horizontal" #userEditForm="ngForm" (ngSubmit)="onSaveUser()" novalidate>
    ....
</form>

我尝试使用 .reset() 函数,但它什么也没做。 .resetForm 实际上将表单的 _submitted 属性从 true 重置为 false,但是,它给了我一个 TypeScript 错误Property resetForm does not exist on type FormControl

首先,resetForm 是一个实际有效的函数吗?我似乎找不到任何文档...但它有效,而 .reset() 无效。

其次,我怎样才能摆脱这个 TypeScript 错误?我需要为 Angular 2 更新我的类型吗?

【问题讨论】:

angular.io/api/forms/FormControl 没有resetForm,如果你去掉它,那么打字稿错误就会消失 声明userEditFormNgForm 像这样:ViewChild("userEditForm") userEditForm: NgForm;,这样你就可以访问.resetForm() 方法。 @developer033 这就是我所缺少的。完美运行! 【参考方案1】:

像这样声明userEditFormNgForm

@ViewChild("userEditForm") userEditForm: NgForm;

现在您可以访问.resetForm() 方法。

【讨论】:

ViewChild 中缺少@【参考方案2】:

你应该从 @angular/forms 导入 NgForm 并试试这个。

OnClear(userEditForm: NgForm) 
  userEditForm.reset();
 

【讨论】:

做到了!我应该使用类型 NgForm 而不是 FormControl。顺便说一句,NgForm 中有一个 resetForm。【参考方案3】:

添加导入:

import  NgForm  from "@angular/forms";

ngOnChanges (changes: SimpleChanges) 
    /** add this **/
    form.reset();
    console.log(this.userEditForm);

【讨论】:

以上是关于Angular 2 FormControl.reset() 不起作用,但 .resetForm() 起作用(但打字稿错误)的主要内容,如果未能解决你的问题,请参考以下文章

如何安装和导入 angular 2 '@angular/router'?

如何在多个 Angular 2 项目之间共享一个 Angular 2 组件?

Angular 2.0 Material MdDialog 与 Angular 2.0 的工作示例

404 使用 Angular2、angular2-websocket 和类型

Angular 1 和 Angular 2 集成:无缝升级的方法

angular 2 [innerHTML] 在 html 内渲染(不适用于 angular 2)[重复]