如何在ng-select中以Observable类型的数组插入值

问题描述 投票:1回答:1

我正在使用ng-select并专门使用typeahead从服务器获取列表作为用户类型。以下是typeahead example : people3$中描述的示例。我的要求是在用户点击按钮时增加价值(我有idlabel以及相应的对象),但我不明白:

  1. 如何将项目推送到item : Observable<any[]>我尝试做this.item = concat(of([{label:this.field.display,id:value}]))它推动值但它不反映ng-select中的值,直到我点击元素之外的其他地方。
  2. 我尝试了this solution by @ViewChildthis.ngSelect.items = [{label:this.field.display,id:value}]仍然没有在ng-select中显示值。

error

在组中添加值后,我添加了对象但仍然没有显示,如果我很快点击任何值,将显示值。

我想知道

  1. 可能是这种行为的原因。
  2. Observable<any[]>推送物品的首选方式

这是我的ng-select配置:

<ng-select class="form-control ng-select-padding"
                 [items]="referenceItems | async"
                 [hideSelected]="true"
                 [loading]="searchFailed"
                 [typeahead]="searchReferenceItems"
                 bindLabel="label"
                 bindValue="id"
                 (change)="setField($event)"
                 (blur)="onUpdated()"
                 [formControlName]="field.name" ngDefaultControl>
      </ng-select>

//@ TS file

searchReferenceItems =  new Subject<object>();
referenceItems: Observable<any[]> ;

谢谢你的帮助

angular rxjs angular6 rxjs6 angular-ngselect
1个回答
0
投票

必须通过下一个函数通知observable,您可以使用BehaviorSubject和函数asObservable()来显示元素。

   subject = new BehaviourSubject<any>([]) 
   referenceItems = this.subject.asObservable(); 

然后,当您想要更新值时,可以使用主题的“下一个”功能。

   this.subject.next(this.subject.value.concat({id:..., label:...}));
© www.soinside.com 2019 - 2024. All rights reserved.