类型“AbstractControl”Angular 4 上不存在属性“控件”

新手上路,请多包涵

我正在Angular 4中尝试嵌套的反应形式。它工作正常但是当我尝试构建AOT时它会抛出错误

“AbstractControl”类型上不存在“控件”

我用谷歌搜索并尝试了一些东西,但没有运气。谁能告诉我如何解决这个问题?

 <div [formGroup]="myForm">
    <div formArrayName="addresses">
        <div *ngFor="let address of myForm.get('addresses').controls; let i=index"
                    class="panel panel-default">
            <span *ngIf="myForm.get('addresses').length > 1"
                    (click)="removeAddress(i)">Remove</span>
            <div [formGroupName]="i">
                <mat-form-field>
                    <input matInput formControlName="city" placeholder="city" value="">
                </mat-form-field>
            </div>

        </div>
    </div>
    <a (click)="addAddress()" style="cursor: default"> Add +</a>
</div>

下面的打字稿代码

constructor(private _fb: FormBuilder) {
}

ngOnInit() {
    this.myForm = this._fb.group({
        addresses: this._fb.array([
            this.initAddress(),
        ])
    });
}
initAddress() {
    return this._fb.group({
        city: ['']
    });
}
addAddress() {
    const control = <FormArray>this.myForm.get('addresses');
    control.push(this.initAddress());
}
removeAddress(i: number) {
    const control = <FormArray>this.myForm.get('addresses');
    control.removeAt(i);
}

原文由 Munna Babu 发布,翻译遵循 CC BY-SA 4.0 许可协议

阅读 741
2 个回答

根据@Günter Zöchbauer 的评论,首先我改变了

myForm.controls['addresses']myForm.get('addresses') 在 html 和 typescript

然后基于@yuruzi 评论

myForm.get('addresses').controls 更改为 myForm.get('addresses')['controls']

它现在工作正常。谢谢@gunter & yuruzi

原文由 Munna Babu 发布,翻译遵循 CC BY-SA 3.0 许可协议

作为@sunny kashyap 解决方案的更新,我会这样写:

 getControls() {
  return (this.recipeForm.get('controlName') as FormArray).controls;
}

原文由 Motasem Halawani 发布,翻译遵循 CC BY-SA 4.0 许可协议

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进