{ "id": "guide/property-binding-best-practices", "title": "Property binding best practices", "contents": "\n\n\n
By following a few guidelines, you can use property binding in a way that helps you minimize bugs and keep your code readable.
\nSee the
Evaluation of a template expression should have no visible side effects.\nUse the syntax for template expressions to help avoid side effects.\nIn general, the correct syntax prevents you from assigning a value to anything in a property binding expression.\nThe syntax also prevents you from using increment and decrement operators.
\nIf you had an expression that changed the value of something else that you were binding to, that change of value would be a side effect.\nAngular might or might not display the changed value.\nIf Angular does detect the change, it throws an error.
\nAs a best practice, use only properties and methods that return values.
\nA template expression should evaluate to the type of value that the target property expects.\nFor example, return a string if the target property expects a string, a number if it expects a number, or an object if it expects an object.
\nIn the following example, the childItem property of the ItemDetailComponent expects a string.
You can confirm this expectation by looking in the ItemDetailComponent where the @Input() type is string:
The parentItem in AppComponent is a string, which means that the expression, parentItem within [childItem]=\"parentItem\", evaluates to a string.
If parentItem were some other type, you would need to specify childItem @Input() as that type as well.
In this example, ItemListComponent is a child component of AppComponent and the items property expects an array of objects.
In the ItemListComponent the @Input(), items, has a type of Item[].
Notice that Item is an object that it has two properties; an id and a name.
In app.component.ts, currentItems is an array of objects in the same shape as the Item object in items.ts, with an id and a name.
By supplying an object in the same shape, you satisfy the expectations of items when Angular evaluates the expression currentItems.