there are lots of blogs already posted for this error but none is specified for angular4.
I am adding and removing dynamic controls on the form
add controls to the form during intialization
ngOnInit() {
this.lienHolder = this._fb.group({
emailAddress: ['', [Validators.required, Validators.email]],
policyDetails: this._fb.array([
this.initPolicyTemplate(),
])
});
}
initPolicyTemplate() {
return this._fb.group({
policyNumber: ['', [Validators.required, Validators.pattern("(^[^0][A-Z]{1}[0-9]*$)")]],
vinNumber: ['', [Validators.required, Validators.pattern('^[0-9]{6}$')]],
});
}
adding more control by calling this method
addPolicyTemplate() {
const control = <FormArray>this.lienHolder.controls['policyDetails'];
control.push(this.initPolicyTemplate());
}
removing controls from the form
removePolicyTemplate(i: number) {
const control = <FormArray>this.lienHolder.controls['policyDetails'];
control.removeAt(i);
}
but when i build the code i get error like this
this is my html
<div formArrayName="policyDetails">
<div *ngFor="let _policy of lienHolder.controls.policyDetails.controls; let i=index">
<div class="panel panel-default">
<div class="panel-head">
<div class="glyphicon glyphicon-remove pull-right" *ngIf="lienHolder.controls.policyDetails.controls.length > 1" (click)="removePolicyTemplate(i)"></div>
</div>
<div class="panel-body">
<div [formGroupName]="i">
<address [policyGroup]="lienHolder.controls.policyDetails.controls[i]"></address>
</div>
</div>
</div>
</div>
</div>
I am not able to resolve this issue. i have followed this blog to come up with the dynamic control
UPDATE 1
when i changed my .ts code like this
get DynamicFormControls() {
return <FormArray>this.lienHolder.get('policyDetails');
}
and the HTML code like this
<div formArrayName="policyDetails">
<div *ngFor="let _policy of DynamicFormControls.controls ; let i=index" style="position: relative">
<add-policy-details [policyGroup]="lienHolder.controls.policyDetails.controls[i]"></add-policy-details>
<div class="remove-btn" (click)="removePolicyTemplate(i)" *ngIf="lienHolder.controls.policyDetails.controls.length > 1">
</div>
</div>
</div>
it was working, and i was able to compile the file in t he production mode, using the command
ng build --target=production --environment=prod
but from the past few days, i am facing the same error and not able to compile it in the production mode, i have not updated any of my application
node version - v6.11.1
npm version - 3.10.10
angular version - 4.0
dont know what exactly is causing the error.
Descriptionlink. It provides some of the shared behavior that all controls and groups of controls have, like running validators, calculating status, and resetting state. It also defines the properties that are shared between all sub-classes, like value , valid , and dirty . It shouldn't be instantiated directly.
A FormArray aggregates the values of each child FormControl into an array. It calculates its status by reducing the status values of its children. For example, if one of the controls in a FormArray is invalid, the entire array becomes invalid.
getArrayControls() {
return (<FormArray>this.sampleForm.get('formArr')).controls;
}
<div *ngFor="let elem of getArrayControls(); let i = index" [formGroupName]="i">
<input formControlName="sampleElementOfArr">
</div>
UPDATE:
Type assertion using the '<>' syntax is forbidden. Use the 'as' syntax instead
getArrayControls() {
return (this.sampleForm.get('formArr') as FormArray).controls;
}
read more about Dynamically Creating Form Fields With FormArray
In my case problem was I mentioned the return type of function as FormArray. I removed the return type now my getter method looks like this
get eventExtraDetailsArray(){
return this.addEventExtraForm.get('regDetails') as FormArray;
}
and in the HTML I modified the code to something like this
<div formArrayName="regDetails">
<div *ngFor="let eventCharge of addEventExtraForm['controls'].regDetails['controls']; let regIdx = index"
[formGroupName]="regIdx">
</div>
</div>
Now the production build works fine.
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With