У меня есть выбор (bootstrap -select ) на моей веб-странице, который состоит из некоторых данных, которые будут обновляться в соответствии с некоторым фильтром. Данные привязываются к выбранному через API.
<select appBootstrapSelect data-live-search="true" [(ngModel)]="mCompany" >
<option value=''>All</option>
<option *ngFor="let motherCompany of motherCompanies " [ngValue]="motherCompany.id">
{{motherCompany.name}}
</option>
</select>
Некоторые исходные данные заполняются в выделении во время ngOnInit
, и это отлично работает. Но когда я пытаюсь обновить options
из select
с помощью кода, изменив модель, это, похоже, не отражает. Я заметил одну вещь: если я удалю атрибут appBootstrapSelect
, select
будет иметь стиль по умолчанию и привязка из кода работает, что является поведением, которое я хочу.
appBootstrapSelect
- это Directive
и код для него следующий
import { Directive, ElementRef, OnInit, OnDestroy } from '@angular/core';
declare var jQuery: any;
/**
* Directive to wrap bootstrap-select
*/
@Directive({
selector: '[appBootstrapSelect]'
})
export class BootstrapSelectDirective implements OnInit, OnDestroy {
private el;
constructor(private elref: ElementRef) {
this.el = elref.nativeElement;
}
ngOnInit() {
// wrapping in setTimeout to delay init until after attribute binding
setTimeout(() => {
jQuery(this.el).selectpicker({
iconBase: 'fa',
tickIcon: 'fa-check'
});
},2000);
}
ngOnDestroy() {
jQuery(this.el).selectpicker('destroy');
}
refresh() {
jQuery(this.el).selectpicker('refresh');
}
/**
* Manually dispatch a change event to let Angular know of a programmatic change to the select
*/
triggerChangeEvent() {
this.el.dispatchEvent(new Event('change', { 'bubbles': true }));
}
/**
* Select an option in this select by id
* @param id
*/
selectOptionById(id) {
jQuery(this.el).find('#'.concat(id)).prop('selected', true);
this.triggerChangeEvent();
}
}
Я нашел jQuery код Я думаю, что его нужно вызвать, чтобы список обновился, но не знаю, как это сделать то же в angular. У меня есть ссылка на модель appBootstrapSelect
@ViewChildren('appBootstrapSelect') motherCompanyDropdown: ElementRef;
Почему это может происходить? Как я могу решить эту проблему?
PS: Я тоже пробовал ChangeDetectionStrategy
, но не работает.