Angular2:嵌套窗体的无值访问器

Angular2:嵌套窗体的无值访问器,angular,Angular,我创建了一个带有嵌套表单组的表单: this.cardForm = this.fb.group({ number: ['', Validators.compose([Validators.required, this.validateCardNumber])], holderName: ['', Validators.required], expiry: this.fb.group({ expirationMonth: ['', Validators.requ

我创建了一个带有嵌套表单组的表单:

this.cardForm = this.fb.group({
    number: ['', Validators.compose([Validators.required, this.validateCardNumber])],
    holderName: ['', Validators.required],
    expiry: this.fb.group({
      expirationMonth: ['', Validators.required],
      expirationYear: ['', Validators.required],
    }, this.validateCardExpiry),
    cvc: ['', Validators.required]
});
进入我的模板:

<form [formGroup]="cardForm" novalidate="novalidate" (ngSubmit)="onSave()"> 
    <div class="form-group" formGroupName="expiry">
        <label for="expirationmonth">Expiration month</label>
        <select2 id="default-select"
                name="expirationmonth"
                formControlName="expirationMonth"
                [data]="months$ | async"
                [width]="250"
                [options]="select2Options">
        </select2>
        <label for="expirationyear">Expiration year</label>
        <select2 id="default-select2"
                name="expirationyear"
                formControlName="expirationYear"
                [data]="years$ | async"
                [width]="250"
                [options]="select2Options">
        </select2>
    </div>
</form>
select2是来自的组件

Angular向我传达了以下信息:

错误:路径为“Expiration->expirationMonth”的表单控件没有值访问器

尝试将ngControlDefault添加到您的应用程序


这似乎是表单的一个问题,根据

因此,您目前必须对此进行一些变通。根据对该问题的最后评论,您可以尝试已采取的措施:

我花了一些时间来研究如何使用反应形式。我所要做的就是实现ControlValueAccessor,并在select/unselect上从ngAfterViewInit传播更改

在处理代码时,我发现的另一个解决方法是在selects上使用ngDefaultControl

<select2 ngDefaultControl ..... ></select2>
要修补其中一个值的组件:

changede{//e在这里是基元类型 此.cardForm.controls['expiration'].controls['expirationMonth'].patchValuee }
大家好,我们一直在研究这个话题,我给出了一个正确的答案,您可以在这里查看:
<select2 ngDefaultControl ..... ></select2>
(valueChanged)="changed($event)"