Ngx-charts 无法在 angular 中使用异步管道直接加载条形图

Ngx-charts can't load bar charts directly with async pipe in angular

我的问题与此类似

当我使用async pipe从firebase观察数据并显示在图表中时,我可以看到图表但在控制台提示null错误。没有异步管道,所有错误都消失了,但我无法获取数据(呃,这是异步数据)。请帮助我。

原因

发生这种情况是因为该组件无法使用 resultsnull 值。

为什么?

正如您所说,当您不想(或不需要)在组件代码中订阅,而是在模板中订阅时,使用异步管道。然而,管道是一个纯函数:每次调用时都必须 return 某些东西

当数据从服务器到达之前调用异步管道时,管道 returns null,没有更好的价值可以提供。

根据错误跟踪的屏幕截图,当 results 设置为 null 时,ngx-charts-bar-vertical 似乎不起作用,然后中断。

修复

当数据不存在时,您根本不需要呈现条形图组件。您可以通过使用 NgIf 指令来执行此操作,该指令允许您在模板中使用 as 进行绑定。对于这些您想要有条件地显示模板的一部分,但随后再次使用该值的情况非常有用。

<ngx-charts-bar-vertical *ngIf="surveyAnswers | async as answers"
                         [results]="answers"
></ngx-charts-bar-vertical>

虽然 surveryAnswers observable 不发射任何东西,组件不会被渲染,因此不会有错误。当它发出时,async 管道将捕获它,触发 CD,它不再是 null——它将是一个真值,然后被输入一个名为 answers 的变量我们用来输入组件的 results 输入。