在 Angular 6 项目中,我正在尝试使用ng-select节点包。在使用模板表达式时,我面临着设置下拉列表中选择的项目的困难。没有模板表达式,我可以设置下拉列表中选择的项目。
我在 stackblitz 中创建了一个演示项目。请在此处检查代码https://stackblitz.com/edit/ngselect-demo
在 Angular 6 项目中,我正在尝试使用ng-select节点包。在使用模板表达式时,我面临着设置下拉列表中选择的项目的困难。没有模板表达式,我可以设置下拉列表中选择的项目。
我在 stackblitz 中创建了一个演示项目。请在此处检查代码https://stackblitz.com/edit/ngselect-demo
ng-select是一个非常灵活的组件,用于比较数组中的元素。
这是负责此比较的findItem函数:
findItem(value: any): NgOption {
let findBy: (item: NgOption) => boolean;
if (this._ngSelect.compareWith) {
findBy = item => this._ngSelect.compareWith(item.value, value)
} else if (this._ngSelect.bindValue) {
findBy = item => !item.children && this.resolveNested(item.value, this._ngSelect.bindValue) === value
} else {
findBy = item => item.value === value ||
!item.children && item.label && item.label === this.resolveNested(value, this._ngSelect.bindLabel)
}
return this._items.find(item => findBy(item));
}
如您所见,它遵循以下规则:
1)compareWith
如果提供,则使用函数,否则
2)bindValue
如果提供,则使用,否则
3)bindLabel
如果提供,请使用
在您传递的第一个不使用模板表达式的控件中,bindLabel
它可以正常工作。如果您将相同的输入添加到第二个控件,它将起作用
如果您想将选定的值保留为对象数组,那么我建议您使用compareWith
输入
html
<ng-select
...
[compareWith]="compareWith"
ts
compareWith(item, selected) {
return item.id === selected.id
}
否则使用bindValue