如何使用angular2下拉式multiselect和observables阵列?
在arraylist“options”中使用angular2下拉多选时如何使用angular2下拉式multiselect和observables阵列?,angular,multi-select,Angular,Multi Select,在arraylist“options”中使用angular2下拉多选时 <ss-multiselect-dropdown [options]="options" [texts]="myTexts" [settings]="mySettings" [(ngModel)]="selectedOption" [ngModelOptions]="{standalone: true}" (ngModelChange)="onChange($event)"></ss-multiselect
<ss-multiselect-dropdown [options]="options" [texts]="myTexts" [settings]="mySettings" [(ngModel)]="selectedOption" [ngModelOptions]="{standalone: true}" (ngModelChange)="onChange($event)"></ss-multiselect-dropdown>
但在这里我需要使用可观察的“options$”而不是数组“options”。
如何做到这一点
是的,类似于异步管道。但是
options$| async
不起作用
那么我更愿意使用同步回调而不是异步回调
请使用toPromie()
method来同步methode。像
this.http.get(this.apiUrl + 'GetOptions')
.toPromise()
.then(responce =>
this.options = responce.json())
.catch(error => {
return Observable.throw(error);
});
如果在选择组件中直接使用异步管道不起作用,可以尝试使用:
<ng-container *ngIf="options$| async as options">
<ss-multiselect-dropdown [options]="options" [texts]="myTexts" [settings]="mySettings" [(ngModel)]="selectedOption" [ngModelOptions]="{standalone: true}" (ngModelChange)="onChange($event)"></ss-multiselect-dropdown>
</ng-container>
您只需使用*ngIf即可
<div *ngIf="myOptions.length > 0">
<ss-multiselect-dropdown [options]="myOptions" [settings]="mySettings" [(ngModel)]="optionsModel" (ngModelChange)="onChange($event)"></ss-multiselect-dropdown>
</div>
同样,你的页面也不会等待可观察到的响应,加载速度也很快。
另外,您可以使用一个在加载选项后变为真的
布尔值,而不是“myOptions.length>0”
。我不明白!但是,如果您想了解异步管道,请告诉我?比如,[options]=“options | async”
?是的,比如async管道。但是选项$| async不起作用。是否要将服务回调更改为同步
,而不是异步
?是否有任何理由更改服务实现以满足此特定UI要求?我看不出把可观察的转化为承诺,然后再把它转化为可观察的有什么意义