I have a hidden input to control the changes made by jQuery, which includes an event of angular2 change, like this
<input id='input1' hidden (change)='onChange($event)'>
Then in my case, I have to use jQuery to change value of this input, then trigger change event:
$('#input1').val('somevalue').trigger('change');
This change event that I triggered via jQuery only works with jQuery, but not Angular2:
//This is working
$('#input').change(function(){
  console.log('Change made');
})
In angular2 component:
//This is not working
onChange(): void{
  console.log('Change made');
}
How can I work around in this situation?
Yes, Angular can use jQuery if it's present in your app when the application is being bootstrapped. If jQuery is not present in your script path, Angular falls back to its own implementation of the subset of jQuery that we call jQLite.
NgModelChange Vs Change Change is a DOM Event and has nothing to do with the Angular. You can use change event on <input>, <select>, and <textarea> form elements. Change event fires when you remove the focus from input text after changing the content.
The difference is that the oninput event occurs immediately after the value of an element has changed, while onchange occurs when the element loses focus, after the content has been changed.
You could assign a template reference variable to the <input>, like #hiddenInput1, get a hold of its native element (via @ViewChild) inside the component class and then use jQuery itself to listen to the change event.
Demo plunker here.
import { Component, ViewChild, ElementRef, AfterViewInit } from '@angular/core';
@Component({
  selector: 'my-app',
  template: `
  <h1>My First Angular 2 App</h1>
  <hr>
  <input id='input1' hidden #hiddenInput1>
  `
})
export class AppComponent implements AfterViewInit  {
  @ViewChild('hiddenInput1') hiddenInput1:ElementRef;
  ngAfterViewInit() {
    $(this.hiddenInput1.nativeElement).on('change', (e) => {
      console.log('Change made -- ngAfterViewInit');
      this.onChange(e);
    });
  }
  onChange(): void{
    console.log('Change made -- onChange');
  }
}
                        Angular2 change event is added via native addEventListener. 
You cannot trigger a native event with jQuery's .trigger('change'). So you will need to create a native event and dispatch it:
 const customEvent = document.createEvent('Event');  
 customEvent.initEvent('change', true, true);
 $('#input1')[0].dispatchEvent(customEvent);
This way angular2 will fire onChange handler.
Here is a demo plunker
As @Cristal Embalagens mentioned in comments you need to use input event for angular2 because
DefaultValueAccessor is subscribing on this event:
@Directive({
  selector:
      'input:not([type=checkbox])[formControlName],textarea[formControlName],input:not([type=checkbox])[formControl],textarea[formControl],input:not([type=checkbox])[ngModel],textarea[ngModel],[ngDefaultControl]',
  host: {'(input)': 'onChange($event.target.value)', '(blur)': 'onTouched()'},
  providers: [DEFAULT_VALUE_ACCESSOR]
})
export class DefaultValueAccessor implements ControlValueAccessor {
Some Example
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With