2016-12-02 3 views
4

Приложение My Angular2 использует RESTful API, а затем создает кучу <select> элементов на основе результата. Я пытаюсь вызвать функцию jQuery для этих элементов <select>, но похоже, что функция jQuery выполняется слишком поздно. Я попытался поставить функцию в ngAfterContentInit, но это не сработало. Поместив его в ngAfterViewChecked, я застал мой браузер.Угловой 2 вызов jQuery после элементов рендеринга - после использования API

После того, как страница отобразилась, если я вставляю функцию jQuery в консоль, все работает, поэтому я знаю, что моя функция и все функциональны. Их порядок, вероятно, перепутался или что-то в этом роде.

В моем компоненте:

ngOnInit() { 
    this.myService.getAll().subscribe(
      data => this._data = data, 
      error => this._error = "invalid."); 
} 

ngAfterViewInit() { 
    $("select").select2(); // <--- jQuery function I need to execute after rendering 
} 

В моем шаблоне:

<select *ngFor="let d of _data">...blah blah</select> 
+0

Как насчет вызов '$ (" select "). select2();' в подписке? –

+0

Не повезло, к сожалению .. – 7ball

ответ

7

Это должно работать для вас:

@ViewChild('select') selectRef: ElementRef; 
constructor(private myService: MyService, private ngZone: NgZone) {} 

ngOnInit() { 
    this.myService.getAll().subscribe(data => { 
    this.options = data; 
    // waiting until select options are rendered 
    this.ngZone.onMicrotaskEmpty.first().subscribe(() => { 
     $(this.selectRef.nativeElement).select2(); 
    }); 
    }); 
} 

Plunker Example

+0

Спасибо! Это работает!!! – 7ball

+0

Но разве это не повлияет только на элемент ''