angular 6 ng-select 如何使用模板表达式在下拉列表中设置项目 selected
angular 6 ng-select how to set item selected in drop down list by using template expression
在 Angular 6 项目中,我尝试使用 ng-select 节点包。在使用模板表达式时,我很难在下拉列表中设置项目 selected。没有模板表达式,我可以在下拉列表中设置项目 selected。
我在 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
因此它可以正常工作。如果您将相同的输入添加到第二个控件,它将起作用
如果您想将 selected 值保留为对象数组,那么我建议您使用 compareWith
输入
html
<ng-select
...
[compareWith]="compareWith"
ts
compareWith(item, selected) {
return item.id === selected.id
}
否则使用bindValue
在 Angular 6 项目中,我尝试使用 ng-select 节点包。在使用模板表达式时,我很难在下拉列表中设置项目 selected。没有模板表达式,我可以在下拉列表中设置项目 selected。
我在 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
因此它可以正常工作。如果您将相同的输入添加到第二个控件,它将起作用
如果您想将 selected 值保留为对象数组,那么我建议您使用 compareWith
输入
html
<ng-select
...
[compareWith]="compareWith"
ts
compareWith(item, selected) {
return item.id === selected.id
}
否则使用bindValue