我想开始这样的场景:
@Output
变量发出的选定值。如我所见,如示例中所建议,无法通过两种方式绑定到[(ngModel)]
来实现此行为。
在我的特定情况下(使用ngrx
商店),我希望将所选值(在ng-select
下拉列表中)绑定到商店中的值。因此,在适当的ngrx
操作会更改“商店”中的值时,将更改所选的值。
https://ng-select.github.io/ng-select
谢谢,伙计们。
答案 0 :(得分:0)
找到解决方案
模板和组件的控制器示例。请阅读代码中的注释。
模板:
<ng-select #select (change)="onChange($event)" ... >
...
</ng-select>
通常,我们需要对组件和change
事件处理程序的引用。
控制器:
@Component(...)
export class NgSelectWrapper implements OnInit, OnChanges
@Input() value: string | number;
@Output() changed = new EventEmitter<string>();
private _selectedValue: string | number;
ngOnChanges(changes: SimpleChanges): void {
if (changes.value) {
// Selected value can be changed only through the @Input field.
this._selectedValue = changes.value.currentValue;
// First time itemsList of ng-select component is not initialized,
// so we need to wait to the next tick to select an item.
setTimeout(() => this.selectValue(this._selectedValue), 0);
}
}
onChange(event: NewDropdownOptionModel) {
// Overwrite selection done by the user interaction and select the previous item forcibly.
// So only ngOnChanges hook can change the selected item.
this.selectValue(this._selectedValue);
if (event.id !== this._selectedValue) {
this.changed.emit(event.id);
}
}
private selectValue(value: string | number): void {
if (value) {
if (!this.trySelectItem(value)) {
this.select.clearModel();
}
}
}
private trySelectItem(value: string | number): boolean {
const item = this.select.itemsList.findItem(value);
return item
? (this.select.select(item), true)
: false;
}
}
因此,我们无需使用[(ngModel)]
绑定并手动处理项目的选择。