My Angular2 app consumes a RESTful API and then creates a bunch of <select>
elements based on the result. I'm trying to call a jQuery function on these <select>
elements, but it looks like the jQuery function executes too late. I tried putting the function in ngAfterContentInit
but that didn't work. Putting it in ngAfterViewChecked
froze my browser.
After the page has rendered, if I paste the jQuery function into the console, everything works, so I know that my function and everything are functional. Their order is just probably messed up or something.
In my component:
ngOnInit() {
this.myService.getAll().subscribe(
data => this._data = data,
error => this._error = "invalid.");
}
ngAfterViewInit() {
$("select").select2(); // <--- jQuery function I need to execute after rendering
}
In my template:
<select *ngFor="let d of _data">...blah blah</select>
This should work for you:
@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
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