Jul*_*ius 3 observable rxjs angular
我想知道是否有可能检查可观察值是否收到任何值。而且我想要这个而不订阅它,因为我太懒了以至于无法覆盖当前代码。问题是我在父组件中创建了可观察对象,然后将其传递给子组件。而且我只需要一件小事,因此订阅该书似乎是不必要的...
父组件:
adverts$: Observable<advert[]>;
ngOnInit() {
this.adverts$ = this.advertService.advertsPerUser();
Run Code Online (Sandbox Code Playgroud)
服务:
advertsPerUser() {
return this.advertsKeysPerUser()
.map(adKeys => adKeys.map(adKey => this.afDb.object('adverts/' + adKey.$key )))
.flatMap(val => Observable.combineLatest(val) );
}
Run Code Online (Sandbox Code Playgroud)
所以我的目标是在parent-component.html中执行以下操作:
<div *ngIf="adverts$">
Run Code Online (Sandbox Code Playgroud)
您可以尝试使用 defaultIfEmpty 运算符(请参阅说明)。假设您的 adsPerUser 返回一个数字,您可以这样做:
this.adverts$ = this.advertService.advertsPerUser().map(count => count > 0).defaultIfEmpty(false);
Run Code Online (Sandbox Code Playgroud)
在 HTML 中:
<div *ngIf="adverts$ | async">
Run Code Online (Sandbox Code Playgroud)
或使用 rxjs 版本 6:
this.adverts$ = this.advertService.advertsPerUser().pipe(
map(count => count > 0),
defaultIfEmpty(false)
);
Run Code Online (Sandbox Code Playgroud)
小智 6
简而言之,没有。
默认情况下,Observable是单播,其行为类似于功能,因此一旦实际订阅,便向观察者发出值。重要的是它类似于功能,订阅是启动那些可观察对象的实际尝试。如果您想到典型的函数返回一个值(或不返回),则直到函数实际执行并返回其结果时,您才能知道。同样适用于Observable,在订阅之前,您无法拥有源的值。
我遇到了类似的问题,我想检查我的响应(自定义类型的数组)是否为空。这是我的解决方案
<div *ngIf="(response$ | async).length == 0">
<p>no results</p>
</div>
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
11115 次 |
| 最近记录: |