Javascript 角度ng选择:如何使ng选项不可选择?
这也许是一件容易解决的事情,但我自己却无法实现我想要的。现在让我们来解决这个问题-我添加了一个选项,它允许我为我的选项列表添加另一个选项,如下所示: 问题是,当我单击文本输入时,即使我使用Javascript 角度ng选择:如何使ng选项不可选择?,javascript,angular,typescript,angular-ngselect,Javascript,Angular,Typescript,Angular Ngselect,这也许是一件容易解决的事情,但我自己却无法实现我想要的。现在让我们来解决这个问题-我添加了一个选项,它允许我为我的选项列表添加另一个选项,如下所示: 问题是,当我单击文本输入时,即使我使用stopPropagation和preventDefault,它也只是选择了这个: 这就是我的组件的外观: <ng-select class="ng-select-dropdown-width" bindLabel="Label" bindValue
stopPropagation
和preventDefault
,它也只是选择了这个:
这就是我的组件的外观:
<ng-select
class="ng-select-dropdown-width"
bindLabel="Label"
bindValue="Label"
appendTo="body"
dropdownPosition="bottom"
[placeholder]="fieldAttributes?.List?.Placeholder"
[multiple]="fieldAttributes?.List?.AllowUserMultiSelect"
[(ngModel)]="value"
(ngModelChange)="writeValue($event)">
<ng-option >
<div class="form-control">
<div class="row add-item-control">
<input type="text"
class="col-10"
placeholder="Add option"
[(ngModel)]="addInputOption"
[ngModelOptions]="{standalone: true}"
(focusout)="addInputOption=''"
(click)="addOption($event)"
(keydown)="saveOption($event)"/>
<div *ngIf="addInputOption.length"
class="col cc-grey-400-txt">{{'diaries.components.addItem' | translate}}</div>
</div>
</div>
</ng-option>
<ng-option *ngFor="let option of filteredPickList | async" [value]="option.Label">
{{option.Label}}
</ng-option>
</ng-select>
编辑1:
可能问题在于ng select不在DOM中,但我不知道在这种情况下我能做什么:
EDIT2:将
设置为禁用,使我能够在输入中键入文本,但它不会触发任何事件,因此我无法处理keydown(例如)
addOption(event) {
event.stopPropagation();
event.preventDefault();
}
saveOption(event) {
if (event.keyCode === 13 || event.keyCode === 32) {
event.stopPropagation();
if (event.keyCode === 13) {
this.isPickListUpdated = true;
this.store.dispatch(new Loading('shared.saving'));
this.componentsApiService.addPicklistItem(this.fieldAttributes.List.ID, this.addInputOption)
.pipe(
finalize(() => {
this.store.dispatch(new StopLoading('shared.saving'));
}),
takeUntil(this.componentDestroyed$))
.subscribe(result => {
this.filteredPickList.next(result.PickListItems);
this.updateItemsList(this.fieldAttributes.List.ID, result.PickListItems);
this.value = this.addInputOption;
this.addInputOption = '';
}, ({error}) => {
this.snackBarService.error(error.message);
});
}
}
}
private updateItemsList(listID: string, updatedList: PickListItem[]) {
for (const field of this.component.Schema) {
if (field.Attributes.List && field.Attributes.List.ID === listID) {
field.Attributes.List.PickListItems = updatedList;
}
}
}