Angular ngIf异步管道作为值,仅带空检查

Angular ngIf异步管道作为值,仅带空检查,angular,rxjs,angular10,rxjs-observables,async-pipe,Angular,Rxjs,Angular10,Rxjs Observables,Async Pipe,我有一个可观察对象,我想在ngIf中创建一个变量,如果值为null,则只返回false(可观察对象返回一个数字) 我需要显式检查null,因为我的observable可以返回0作为触发else块的值 我试过以下方法 *ngIf="(observable$ | async) as obs; obs !== null; esle #elseTemplate" 我目前的解决方案似乎不是很优雅,是 *ngIf="(observable$ | async) !== null

我有一个可观察对象,我想在ngIf中创建一个变量,如果值为null,则只返回false(可观察对象返回一个数字)

我需要显式检查null,因为我的observable可以返回0作为触发else块的值

我试过以下方法

*ngIf="(observable$ | async) as obs; obs !== null; esle #elseTemplate"
我目前的解决方案似乎不是很优雅,是

*ngIf="(observable$ | async) !== null; esle #elseTemplate"
{{ observable$ | async }}

我使用的是Angular 10。

通常,当我在这样的模板中处理observable时,我发现创建一个vm$observable要容易得多,它是从组件中的其他observable构建的(注意,CombineTest最终将支持字典,这意味着您无需进行映射):

然后在dom中,在vm$上执行ngIf,您可以直接比较可观察对象的输出

<ng-container *ngIf="vm$ | async as vm">
    <ng-container *ngIf="vm.observable !== null; else #elseTemplate">
    
    </ng-container>
    ...
</ng-container>

我可以推荐的另一种方法是使用Nils-Melhorn的ngx-observe指令

使用此指令,您可以为下一步、加载甚至错误定义模板。如果发出类似于零的伪值,则还会触发下一个模板

*ngxObserve="observable$; let obs; before loadingTemplate; error errorTemplate"

如果没有空检查程序,它不工作吗*ngIf=“observable$| async as obs;else elseTemplate”我的值是一个可以返回0的数字,因此不会显示它到elseTemplatenull是falsy。理论上<代码>(可观测$|异步)!=null和
(observable$| async)
是相同的。此模式是否有名称,或者您是否有指向更多信息的链接?如果你还有n个,你会做
vm$=combinelateest([observable$,obn$]).pipe(map([observable,obn$])=>({observable,obn$])???这是我以前经常使用angularJs时带来的。我记得在pluralsight视频中看到过它,谷歌快速搜索显示其他人也在使用它。你是完全正确的,它会像这样工作(我更新了我的答案)。我会厌倦使用很少使用或维护的第三方npm软件包。查看github,上一次真正的代码更改是在8个月前。它不是angular的最新两个版本(以及一些次要版本)的最新版本。它只是一个方便的指令,您希望定期更新什么?他还可以复制指令代码tho。
vm$ = combineLatest([
    observable$,
    observable2$,
])
.pipe(
    map(([observable, observable2]) => ({
        observable,
        observable2
    }))
);
<ng-container *ngIf="vm$ | async as vm">
    <ng-container *ngIf="vm.observable !== null; else #elseTemplate">
    
    </ng-container>
    ...
</ng-container>
vm$ = combineLatest({
    observable: observable$,
    observable2: observable2$
})
*ngxObserve="observable$; let obs; before loadingTemplate; error errorTemplate"