【发布时间】:2017-11-14 20:36:05
【问题描述】:
所以我有一个使用动态表单的 Angular 应用程序,效果很好。但是当我将--aot 添加到我的cli 命令时,我收到错误“AbstractControl”类型上不存在属性“控件”。我试过使用文档中的方法。我仍然得到错误。我的代码附在下面。因为我已经阅读了文档。或者也许这是我想念的东西
import { Component, ElementRef, NgZone, OnInit, ViewChild } from '@angular/core'
import { FormControl, ReactiveFormsModule, FormGroup, FormArray, FormBuilder, Validators } from "@angular/forms"
import { Router, ActivatedRoute } from '@angular/router'
import { Location } from '@angular/common'
import { CreateEventService } from './create-event.service'
import { Http, Headers } from '@angular/http'
@Component({
selector: 'create-event',
templateUrl: './create-event.component.html',
styleUrls: ['./create-event.component.css'],
providers: [ CreateEventService ]
})
export class CreateEventComponent implements OnInit {
event: any
tables: string[] = []
searchControl: FormControl
ticketForm: FormGroup
ticketPrices: number[] = []
@ViewChild("search")
public searchElementRef: ElementRef
constructor(private router: Router,private _http: Http, private ngZone: NgZone, private _fb: FormBuilder) { }
ngOnInit() {
this.ticketForm = this._fb.group({
tickets: this._fb.array([
this.initTicket(),
])
})
this.searchControl = new FormControl()
}
initTicket() {
return this._fb.group({
ticketName: [''],
ticketPrice: [''],
ticketLimit: ['', Validators.required]
})
}
addTicket() {
const control = <FormArray>this.ticketForm.controls['tickets']
control.push(this.initTicket())
}
removeTicket(i: number) {
const control = <FormArray>this.ticketForm.controls['tickets']
control.removeAt(i)
this.tables.splice(i, 1)
//console.log(this.tables)
}
}
<form [formGroup]="ticketForm" novalidate>
<div formArrayName="tickets" class="row">
<div *ngFor="let ticket of ticketForm.controls.tickets.controls let i=index" class="row">
<div class="col m7 s12" [formGroupName]="i">
<div class="col m5 s12">
<input type="text" formControlName="ticketName" placeholder="e.g. Regular, VIP">
</div>
<div class="col m4 s6">
<input type="number" formControlName="ticketPrice" placeholder='Ticket Price ₦'>
</div>
<div class="col m3 s6">
<input type="number" formControlName="ticketLimit" placeholder="Quantity">
</div>
</div>
<div class="col m2 s2">
<br>
<a class="primary-base-text" *ngIf="ticketForm.controls.tickets.controls.length > 1" (click)="removeTicket(i)"><i class="fa fa-trash"></i></a>
</div>
</div>
</div>
<div class="col">
<a style="float: left" (click)="addTicket()"><h6>Add another ticket <i class="fa fa-plus"></i></h6></a>
</div>
</form>
【问题讨论】:
-
stackoverflow.com/questions/45738257/… 的可能重复基本上是您创建一个返回表单数组
getForm(){return this.ticketForm.controls.get('tickets')}的函数并在您的 html 中使用该函数。getForm().controls -
@LLai 我也看到了这个问题,但对我没有帮助
标签: angular angular2-forms aot