One disappointing part of reactive programming with Angular 2 is that the framework uses traditional callbacks to handle events and listen for input changes.
Angular 2 First App Post-Mortem
Mike Ryan
19922

Did you try to get value changes through control’s valueChange attribute? It is an observable emitting input values.

Something like this I mean:

@Component({
selector: 'searchbox'
})
@View({
template: `
<div class="searchbox">
<form>
<input [ngFormControl]="searchInput">
</form>
</div>
`,
directives: [FORM_DIRECTIVES]
})
export class Searchbox {
searchInput = new Control();
constructor(private router:Router, private searchApi:SearchAPI) {
this.searchInput.valueChanges.debounceTime(300);
}
}

I have no idea how to do the same for e.g. focus / blur events… Nice article though :)