Angular ngIf异步管道作为值,仅带空检查
我有一个可观察对象,我想在ngIf中创建一个变量,如果值为null,则只返回false(可观察对象返回一个数字) 我需要显式检查null,因为我的observable可以返回0作为触发else块的值 我试过以下方法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="(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"