Explain banana-in-a-box.
Skip to solutionKEEP THE
mediumFrontend
How does two-way binding work under the hood?
427 views
01
Understand the problem
two-way-binding
02
Attempt it yourself
Sketch your approach before reading the solution — that's what interviews test.
Nudge consolestandby
Stuck? Beam a request up — the console returns a conceptual nudge that guides your logic without spoiling the implementation.
03
Study the solution
[(x)] ('banana in a box') is sugar for a property binding plus an event binding: [x]="value" and (xChange)="value=$event". A component supports it by having an @Input() x and an @Output() xChange (the convention ngModel follows).
Solution ready — 2 min read
Classified // press E to declassify
04
Read the code
A two-way bindable component (the desugaring)
import { Component, Input, Output, EventEmitter } from '@angular/core';
// Expose value + valueChange to support [(value)] on this component.
@Component({
selector: 'app-stepper',
template: '<button (click)="dec()">-</button> {{ value }} <button (click)="inc()">+</button>',
})
export class StepperComponent {
@Input() value = 0;
@Output() valueChange = new EventEmitter<number>(); // name MUST be valueChange
inc() { this.value++; this.valueChange.emit(this.value); }
dec() { this.value--; this.valueChange.emit(this.value); }
}
// Parent can now write: <app-stepper [(value)]="count"></app-stepper>
// which Angular expands to [value]="count" (valueChange)="count = $event"05
Join the discussion
Discussion (0)
Sign in to join the discussion.
No responses yet. Be the first to share what you think.
Transmission complete // awaiting log
KEEP THE
STREAK ALIVE.
Dossier 60 of 121 decoded in the Angular track. One more won't hurt.