У меня проблема с ng-select (я использую новейшую версию и Angular 10).
Я создаю общий компонент под названием form-row-select-multiple
, который буду использовать во многих других компонентах. Вот укороченный TS файл этого компонента:
@Input() options: any[] = [];
@Input() optionKey = 'id'; // in case of options object, specify prop
@Input() optionKeyText = 'name'; // in case of options object, specify prop to show on option textValue
@Input() isMultiple = true;
@Input() selectedValues: any;
@Output() valueChange: EventEmitter<any> = new EventEmitter();
elementId: string;
ngOnInit() {
if (typeof this.selectedValues === 'object' && this.selectedValues !== null && this.selectedValues.length > 0) {
this.selectedValues = this.selectedValues.map(value => value[this.optionKey]);
}
}
onChange(event: any) {
this.valueChange.emit(event);
}
trackById(item: any) {
return item.id;
}
И HTML этого компонента:
<ng-select
[multiple]="isMultiple"
[id]="elementId"
[items]="options"
[(ngModel)]="selectedValues"
[bindLabel]="optionKeyText"
[bindValue]="optionKey"
(add)="onChange($event)"
[trackByFn]="trackById"
>
Как вы можете видеть в файле TS, я передаю параметры @Input() из другого компонента, где я асинхронно получаю данные с сервера. Моя проблема в том, что, несмотря на использование [bindValue]=optionKey on , он по-прежнему привязывает свое значение ко всему объекту (когда я регистрирую значение события в функции onChange, он регистрирует весь объект).
BindLabel работает нормально, поэтому я не уверен, почему bindValue не работает. Я подумал, что это может быть из-за того, что [(ngModel)]=selectedValues также является объектом, поэтому я реализовал логику в ngOnInit, где, если selectedValues являются объектами, я сделаю из этого простой массив. Но это не решило мою проблему.
У вас есть идеи, где может быть проблема? Никаких ошибок в консоли не появляется. Спасибо за все идеи.