【问题标题】:angular 2 : TypeError: this.form.updateValueAndValidity is not a function角度 2:TypeError:this.form.updateValueAndValidity 不是函数
【发布时间】:2016-11-07 00:45:42
【问题描述】:

我升级到 rc.4 并尝试使用新的 forms-api。这是我得到的:

“TypeError:this.form.updateValueAndValidity 不是函数”

异常源自 angular 中的文件“form_group_directive.js”:

FormGroupDirective.prototype.ngOnChanges = function (changes) {
    this._checkFormPresent();
    if (collection_1.StringMapWrapper.contains(changes, 'form')) {
        var sync = shared_1.composeValidators(this._validators);
        this.form.validator = validators_1.Validators.compose([this.form.validator, sync]);
        var async = shared_1.composeAsyncValidators(this._asyncValidators);
        console.log('from within angular:---------------------------------------------------------------------------------------------------');
        console.log(this.form);
        this.form.asyncValidator = validators_1.Validators.composeAsync([this.form.asyncValidator, async]);
        this.form.updateValueAndValidity({ onlySelf: true, emitEvent: false });
    }

console.log-statement 的输出是 FormGroupDirective,它只是没有名为 updateValueAndValidity 的方法。

上述错误信息对任何人都意味着什么吗?

【问题讨论】:

  • 你仍然使用FormBuilder类还是只使用FormGroup类?
  • 我仍然使用 FormBuilder,并且在表单标签上设置了 [formGroup]="myUserForm"。 FormBuilder 也被弃用了吗?
  • @TobiasGassmann 你在混合新旧形式吗?你能在 Plunker 中复制吗?
  • 感谢@Günter Zöchbauer,试图在 plunkr 中重现问题(我应该从一开始就尝试)让我看到了问题。我不得不删除 #userForm="ngForm" 然后一切正常。
  • 这就是为什么用最少的代码创建 Plunker 是个好主意的主要原因。这揭示了原因发生了很多事情:)

标签: angular angular2-forms angular-validation


【解决方案1】:

我认为您不能同时使用模板驱动方法和模型驱动方法。

所以我会使用以下任一:

<form  *ngIf="showForm" #userForm="ngForm"
   (ngSubmit)="userFormSubmit()">
</form>

或:

<form  *ngIf="showForm" [formGroup]="userForm"
   (ngSubmit)="userFormSubmit()">
</form>

其中userForm 在您的组件类中定义为FormBuilderFormControl。我认为这种方法是你需要的......

【讨论】:

  • 我必须删除 #userForm="ngForm" 然后一切正常
猜你喜欢
  • 1970-01-01
  • 2020-05-09
  • 2021-05-02
  • 2020-06-20
  • 1970-01-01
  • 1970-01-01
  • 2018-09-20
  • 2018-04-19
  • 1970-01-01
相关资源
最近更新 更多