Nicolas
Nicolas

Reputation: 4756

Angular 2 - Bindings cannot contain assignments

I need to give a class to a <tr> if a property of item has the same value as a property from an object in an array.

Here's the code I currently have:

<tr *ngFor="let item of closingDayGroupsList" [class.inactive]="definitionDetails.Groups.filter(i => i.AbsenceReservationGroupID === item.ID).length > 0">

however now I receive the error:

Bindings cannot contain assignments

I'm not sure if what I'm doing is bad practice, or if I'm just making syntax errors.

This is the only way I know to achieve what I want, but it's not working

Upvotes: 49

Views: 57140

Answers (2)

Shubham Dave
Shubham Dave

Reputation: 21

There is a little problem with that. Take as an example, that I want to stop showing the date to the user which is equal to 0000.00.00, so, by taking the inline expression binding I can find it right to:

 {{(appointment_date === "0000.00.00") ? ' ' : appointment_date}} 

Upvotes: 2

Sravan
Sravan

Reputation: 18657

Its a bad practice to use expressions in angular bindings

Move the class expression into controller.

export class AppComponent {
    title = 'Groups';

    getClass(item): void {

      // add filter logic here
      return this.definitionDetails.Groups.filter(i => i.AbsenceReservationGroupID === item.ID).length > 0

    }
}

The tr will be something like,

<tr *ngFor="let item of closingDayGroupsList" [class.inactive]="getClass(item)">

Upvotes: 69

Related Questions