{ "id": "guide/two-way-binding", "title": "Two-way binding", "contents": "\n\n\n
Two-way binding gives components in your application a way to share data.\nUse two-way binding to listen for events and update values simultaneously between parent and child components.
\nSee the
To get the most out of two-way binding, you should have a basic understanding of the following concepts:
\n\nTwo-way binding combines property binding with event binding:
\nAngular's two-way binding syntax is a combination of square brackets and parentheses, [()]
.\nThe [()]
syntax combines the brackets of property binding, []
, with the parentheses of event binding, ()
, as follows.
For two-way data binding to work, the @Output()
property must use the pattern, inputChange
, where input
is the name of the @Input()
property.\nFor example, if the @Input()
property is size
, the @Output()
property must be sizeChange
.
The following sizerComponent
has a size
value property and a sizeChange
event.\nThe size
property is an @Input()
, so data can flow into the sizerComponent
.\nThe sizeChange
event is an @Output()
, which allows data to flow out of the sizerComponent
to the parent component.
Next, there are two methods, dec()
to decrease the font size and inc()
to increase the font size.\nThese two methods use resize()
to change the value of the size
property within min/max value constraints, and to emit an event that conveys the new size
value.
The sizerComponent
template has two buttons that each bind the click event to the inc()
and dec()
methods.\nWhen the user clicks one of the buttons, the sizerComponent
calls the corresponding method.\nBoth methods, inc()
and dec()
, call the resize()
method with a +1
or -1
, which in turn raises the sizeChange
event with the new size value.
In the AppComponent
template, fontSizePx
is two-way bound to the SizerComponent
.
In the AppComponent
, fontSizePx
establishes the initial SizerComponent.size
value by setting the value to 16
.
Clicking the buttons updates the AppComponent.fontSizePx
.\nThe revised AppComponent.fontSizePx
value updates the style binding, which makes the displayed text bigger or smaller.
The two-way binding syntax is shorthand for a combination of property binding and event binding.\nThe SizerComponent
binding as separate property binding and event binding is as follows.
The $event
variable contains the data of the SizerComponent.sizeChange
event.\nAngular assigns the $event
value to the AppComponent.fontSizePx
when the user clicks the buttons.