Got interpolation ({{}}) where expression was expected

I have the following HTML, but I get an exception. How to fix it?

Parser error: interpolation received ({{}}), where expression in column 48 in [! (editForm.controls.field_item_exportExpression _ {{i}} ?. dirty && & editForm.controls.field_item_exportExpression _ {{i}} ?. invalid)]

<div class="form-group"> <label class="form-control-label" for="field_exportExpression">exportExpression</label> <input class="form-control" type="text" id="field_item_exportExpression_{{i}}" name="item_exportExpression_{{i}}" [(ngModel)]="datatype.items[i].exportExpression" required> <div [hidden]="!(editForm.controls.field_item_exportExpression_{{i}}?.dirty && editForm.controls.field_item_exportExpression_{{i}}?.invalid)"> <small class="form-text text-danger" [hidden]="!editForm.controls.field_item_exportExpression_{{i}}?.errors?.required" dpTranslate="dataconfiguration.validation.required"> This field is required. </small> </div> </div> 

Does not work. Saying an unwanted token [ found.

 [hidden]="!editForm.controls.['item_exportExpression_' + i]?.errors?.required 

Below do not complain about [ but complain Cannot read property '0' of undefined

  [hidden]="!editForm.controls.item_exportExpression_[ i]?.errors?.required 
+22
angular angular2-template angular2-forms
source share
4 answers

template

 <div [hidden]="!checkIfInvalid(i, 'item_exportExpression_')"> <small class="form-text text-danger" [hidden]="isRequiredError(i, 'item_exportExpression_')" dpTranslate="dataconfiguration.validation.required"> This field is required. </small> </div> 

component

 checkIfInvalid( index: number, field: string ): boolean { const control = this.getControl( index, field ); if ( control && control.dirty && !control.valid ) { return true; } return false; } isRequiredError( index: number, field?: string ): boolean { const control = this.getControl( index, field ); if ( control && control.getError( "required" ) ) { return true; } return false; } 
+7
source share

{{}} never matches [prop]="..." or (event)="..."

 <small class="form-text text-danger" [hidden]="!editForm.controls.['field_item_exportExpression_' + i]?.errors?.required" dpTranslate="dataconfiguration.validation.required"> This field is required. </small> 
+43
source share

There are 4 types of bindings:

  • Property binding, i.e. [] Required to evaluate values
  • Model binding i.e. [()] requires nothing special
  • Interpolation binding, i.e. {{}} Can be used with common attributes.
  • Event binding ie () works fine with functions

To answer your question, something like this worked for us:

 <input type="checkbox" [id]="['model-'+i]" [(ngModel)]="model" name="model-{{i}}" (change)="changeHandler($event)" /> 
+13
source share

Use like this instead of interpolating

  <button class="btn btn-primary" title="Edit" (click)="showEditModal(record.id)"><i class="fa fa-edit"></i></button> 
0
source share

All Articles