【问题标题】:Angular V9 Async pipe not updating template view on data change [closed]Angular V9异步管道不更新数据更改的模板视图[关闭]
【发布时间】:2020-10-10 16:28:17
【问题描述】:

伙计们,我现在对此几乎停滞不前。我正在使用一项小型服务从 API 获取详细信息,并返回一个 JSON 对象。我将其作为服务方法中的 Observable 返回;然后在创建类时用它初始化局部组件变量“sateliteData$”。

在 HTML 中,我尝试使用 |异步管道处理自动更改检测,因为来自此 API 的值每秒都在更改。但是在查看我的应用程序时,它会获取第一组值并将它们显示到屏幕上,但从不更新它们。

您必须手动刷新页面以获取不同的值,这是我试图通过使用 Observables 和 |异步管道。

我在网上阅读了很多,我所做的一切似乎都与其他人所做的相匹配。我只是想不通,非常感谢有人花时间帮我看看这个。

请参阅下面的代码截图。

谢谢大家。

【问题讨论】:

    标签: typescript angular2-template angular2-pipe rxjs-observables async-pipe


    【解决方案1】:

    最简单的方法是以固定的时间间隔轮询服务器。您可以使用 rxjs 实现此目的

    polling$ = interval(2000).pipe(switchMap(_ => this.service.MyGetRequest()));
    

    您可以在此处查看最小的工作堆栈闪电战:https://stackblitz.com/edit/angular-ivy-ebebp4

    更多关于简单轮询的信息:https://www.learnrxjs.io/learn-rxjs/recipes/http-polling

    如果您轮询不属于您的外部服务或 API,请注意不要向它们发出大量请求。查看他们的文档以确定什么是合适的时间间隔。

    【讨论】:

    • 我对Async管道的理解是它为你订阅了一个observable,监听数据流的变化。从而使用新数据更新您的模板视图。为请求创建手动间隔并完全否定管道的使用不是多余的吗?刚接触管道,所以我只是基于最少的研究而不是实践经验。
    • @LewisMorgans 使用异步管道确实会为您处理订阅。您遇到的问题是您的 observable 仅向您的服务器发送一个请求,之后它处于已解决状态。您请求值的服务器不会以任何方式知道您的 observable,因此在您再次显式调用 api 之前,您将永远不会收到有关该 observable 的另一个响应。
    • 您解释的方式非常合理。感谢您花时间为我解决这个问题。不过,我一直有这样的印象,当使用 Observable 类型时,例如 HTTP/XHR 请求,只要 observable 没有被破坏,它就保持打开状态? Angular httpclientmodule 中是否内置了一些东西,一旦收到数据就会破坏 observable?
    猜你喜欢
    • 2018-07-18
    • 1970-01-01
    • 2018-11-25
    • 2014-10-23
    • 1970-01-01
    • 2021-10-12
    • 2016-08-20
    • 2021-06-16
    • 2019-07-17
    相关资源
    最近更新 更多