Responding to Component Events
Events in Angular 2 work similar to how they worked in Angular 1.x. The big change is template syntax.
import {Component} from '@angular/core';
@Component({
selector: 'counter',
template: `
<div>
<p>Count: {{ num }}</p>
<button (click)="increment()">Increment</button>
</div>
`
})
export class Counter {
num: number = 0;
increment() {
this.num++;
}
}
To send data out of components via outputs, start by defining the outputs attribute. It accepts a list of output parameters that a component exposes to its parent.
import {Component, EventEmitter, Input, Output} from '@angular/core';
@Component({
selector: 'counter',
template: `
<div>
<p>Count: {{ count }}</p>
<button (click)="increment()">Increment</button>
</div>
`
})
export class Counter {
@Input() count: number = 0;
@Output() result: EventEmitter = new EventEmitter();
increment() {
this.count++;
this.result.emit(this.count);
}
}
Together a set of input + output bindings define the public API of your component. In our templates we use the [squareBrackets] to pass inputs and the (parenthesis) to handle outputs.