web-dev-qa-db-fra.com

Appelez la méthode TypeScript depuis jquery in angular 2

J'utilise bootstrap-select Dropdown sous 2 formes angulaires avec jQuery. Onchange jquery event je souhaite appeler une méthode TypeScript onDrop DownChange Change. Mais ça ne marche pas. 

import { Component, OnInit, ViewChild } from '@angular/core';
import { RequestOptions } from '@angular/http';
import 'rxjs/add/observable/throw';
declare var $: JQueryStatic;

export class TestComponent implements OnInit {
  selectedValue: string;

  ngOnInit(): void {

        $(function() {
         var self = this;
          $('.selectpicker').on('change', function(){
            var selectedds = $(this).find('option:selected').val();
            self.onDropDownChangeChange(selectedds); //This is not working
            //this.onChange();
          });

        });  

  }

  onDropDownChangeChange(value: string) {
        this.selectedValue = value;
        this.PopulateGrid(selectedValue);
   }


}
9
Prabhu Arumugam

Vous confondez les portées. Cela devrait être comme ça:

ngOnInit(): void {

    var self = this;
    $(function() {

          $('.selectpicker').on('change', function(){

              var selectedds = $(this).find('option:selected').val();
              self.onDropDownChangeChange(selectedds); //This is not working
              //this.onChange();

           }); 

    }); 
}
18
eko

Vous manquez le contexte.

Et pour gérer l'événement personnalisé de la bibliothèque tierce, dans certains cas, vous devez indiquer à Angular d'exécuter votre code après avoir reçu l'événement de la sorte.

constructor(private zone: NgZone) {}
ngOnInit(): void {
    var self = this;
    this.zone.run(() => {
      $('.selectpicker').on('change', function(){
        var selectedds = $(this).find('option:selected').val();
        self.onDropDownChangeChange(selectedds);
        //this.onChange();
      }); 
    });

  }
1
Tiep Phan