如何在ng-select中的可观察类型的数组中插入值

时间:2019-03-03 15:36:51

标签: angular rxjs angular6 rxjs6 angular-ngselect

我正在使用ng-select,特别是使用typeahead来根据用户类型从服务器获取列表。以下示例如typeahead example : people3$中所述。我的要求是在用户单击按钮时增加价值(我有idlabel以及相应的对象),但我听不懂:

  1. 如何将Item推到item : Observable<any[]>,我尝试执行this.item = concat(of([{label:this.field.display,id:value}])),它推值,但是直到我在元素外部的其他位置单击时,它才反映ng-select中的值。
  2. 我尝试了this solution by @ViewChild,但在this.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[]> ;

感谢您的帮助

1 个答案:

答案 0 :(得分:0)

下一个函数必须通知您可观察的对象,您可以使用BehaviorSubject和asObservable()函数显示元素。

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

然后,无论何时要更新值,都可以对主题使用“下一个”功能。

   this.subject.next(this.subject.value.concat({id:..., label:...}));