【问题标题】:Avoiding multiple calls to observable$ | async in Angular 2+避免多次调用 observable$ | Angular 2+ 中的异步
【发布时间】:2017-06-19 23:23:01
【问题描述】:

在我的组件中,我注入了一个将当前语言作为可观察对象提供的服务。在该组件模板中,我根据用户的区域设置多次显示价格,方式如下:

<p>{{price.toLocaleString(languageService.getCurrentLanguage() | async, { style: 'currency', currency: 'EUR' })}}</p>

问题是我在整个模板中都有 10 个 async 调用,即使 languageService 实际上将主题作为共享的 observable 返回,每次@987654324 时有效地创建一个共享流而不是不同的流@pipe 订阅,我愿意相信有更好的方法来做到这一点。

【问题讨论】:

    标签: angular rxjs observable


    【解决方案1】:

    将 observable 分配给一个字段并绑定到该字段:

    <p>{{price.toLocaleString(currentLanguage() | async, { style: 'currency', currency: 'EUR' })}}</p>
    
    constructor(languageService:LanguageService) {
     this.currentLanguage = languageService.getCurrentLanguage();
    }
    

    【讨论】:

    • 我想过,但在这种情况下,除了简洁之外,我还有什么收获?
    • getCurrentLanguage() 只被调用一次。
    • 好吧,我会买那个 :D 在这种情况下,你认为是否值得写一个管道来一次性完成整个.toLocaleString 调用?
    • LanguageService 注入管道将不起作用,因为管道仅在传递给管道的值或参数更改时才会更新。因此,如果您将服务注入管道并且服务发出新值,则不会发生任何事情。这是你的意思吗?
    猜你喜欢
    • 2020-01-09
    • 1970-01-01
    • 2023-03-04
    • 1970-01-01
    • 2017-08-08
    • 1970-01-01
    • 2018-10-01
    • 1970-01-01
    • 2017-04-24
    相关资源
    最近更新 更多