angular - 用于状态管理的 Angular 和 rxjs subect
问题描述
我只是想知道在服务中使用 Subject 来通知组件状态已更改是否可以。让我举个例子。例如,我有一个组件 adresses-list.component.ts 它只是一个地址列表。单击确定的地址时,其完整信息将在列表右侧或模式中打开。它将被称为“edit-address.component.ts”,因此用户可以在此组件中编辑地址并保存更改。我当然明白,会有后端更新它的请求。然而,问题是我的 addresses-list.component.ts 不会知道这个变化,因为它订阅了可观察的地址而不是变化。所以我的问题是:在我的 service.ts 中执行以下操作是否正常:
addressesUpdated = new Subject();
editAddressById(id) {
// send info to DB
return this.http.patch().map(_ => {this.addressesUpdated.next())
}
在我的地址列表.component.ts
service.addressesUpdated.switchMap( _ => service.getAddresses())
.subscribe(...save data here)
在我看来,有更好的解决方案和更优雅的解决方案,但我不知道如何做得更好)
解决方案
好吧,你当然可以做到。AngularEventEmitter
也只是下面的一个主题(https://angular.io/api/core/EventEmitter)。但是,如果您觉得需要更频繁地执行此操作,我建议您查看像 ngrx 商店这样的状态管理解决方案:https ://github.com/ngrx/platform
推荐阅读
- javascript - 启用屏幕阅读器时,键盘选项卡不起作用
- python - pytorch在模型或层中转发期间如何计算macs和参数?
- core-data - 如何在 SwiftUI 中对 CoreData 关系使用选择器
- rsync - rsync 选项 --update 和 --append-verify
- python - 如何在df中垂直应用函数
- reactjs - 为我的应用程序实现了一个搜索页面,并尝试复制亚马逊搜索页面。使用反应 /universal-router/apollo-graphql
- apache-spark - 带有文件扩展名的 Spark saveAsTextFile
- ruby-on-rails - 在 AWS Cloud9 (c9) 中使用 PostgreSQL 设置 Rails 6
- webpack - Webpack 5 警告:'require.extensions 不受 webpack 支持。改用装载机。
- laravel - 在laravel 8 vue3惯性js上设置ziggy后,app.blade.php中无法识别@route