Angular2 et jQuery ‘changements’ événements

J’ai une entrée cachée pour contrôler les modifications apscopes par jQuery, qui inclut un événement de change angular2, comme ceci

  

Ensuite, dans mon cas, je dois utiliser jQuery pour modifier la valeur de cette entrée, puis déclencher l’événement change :

 $('#input1').val('somevalue').sortinggger('change'); 

Cet événement de change que j’ai déclenché via jQuery ne fonctionne qu’avec jQuery, mais pas avec Angular2:

 //This is working $('#input').change(function(){ console.log('Change made'); }) 

En composante angular2:

 //This is not working onChange(): void{ console.log('Change made'); } 

Comment puis-je contourner cette situation?

    Vous pouvez affecter une variable de référence de modèle à , comme #hiddenInput1 , récupérer son élément natif (via @ViewChild ) dans la classe de composant, puis utiliser jQuery lui-même pour écouter l’événement de change .

    Demo Plunker ici .

     import { Component, ViewChild, ElementRef, AfterViewInit } from '@angular/core'; @Component({ selector: 'my-app', template: ` 

    My First Angular 2 App


    ` }) 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'); } }

    L’événement de changement Angular2 est ajouté via addEventListener natif.

    Vous ne pouvez pas déclencher un événement natif avec le fichier .sortinggger (‘change’) de jQuery. Il vous faudra donc créer un événement natif et l’ envoyer :

      const customEvent = document.createEvent('Event'); customEvent.initEvent('change', true, true); $('#input1')[0].dispatchEvent(customEvent); 

    De cette façon, angular2 se déclenchera onChange gestionnaire de changement.

    Voici une démo plunker

    Comme @Cristal Embalagens mentionné dans les commentaires, vous devez utiliser input événement input pour angular2 car DefaultValueAccessor s’abonne à cet événement:

     @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 { 

    Quelques exemples