【问题标题】:Should a component edit a copy of object from Angular service?组件是否应该编辑来自 Angular 服务的对象副本?
【发布时间】:2018-11-12 12:03:06
【问题描述】:

我正在尝试制作一个基本的交易跟踪应用程序并提供一个跟踪交易的服务。我有一个保存交易的 BehaviorSubject,当一个组件请求交易时,它们会被赋予一个可观察的行为主题。

我现在正在尝试使组件可以编辑事务并让服务在编辑发生时将更改同步回服务器。解决这个问题的最佳方法是什么?我是否以某种方式锁定了 behaviorsubject 持有的值并要求通过 setter 传递编辑?我是否只将交易的副本传递给组件?我是否相信组件不会在未“告知”服务的情况下进行编辑?

我现在要做的是让组件能够编辑交易,并且服务每 10 秒检查一次交易列表是否与原始同步版本不同,然后将差异发送到服务器。这似乎不对。

【问题讨论】:

    标签: angular angular-services angular-components


    【解决方案1】:

    看看我开始研究的一个名为 RxCache 的库。我写它是为了回应我不喜欢当前感染我们美丽的 Angular 世界的 Redux 商店风格方法。它为您提供了推送数据方法,没有任何可笑的样板文件和 ngrx 的开销。

    https://github.com/adriandavidbrand/ngx-rxcache

    【讨论】:

      【解决方案2】:

      我真的不认为人们应该在这些话题浮出水面时直接跳到Redux

      无论您想实现什么,您仍然可以在您当前的服务中实现它。您应该做的是仅通过您的服务锁定编辑。并让你的组件监听你的服务发布的BehaviorSubject

      您不能直接在组件中更改记录,因为您获得的副本应该是只读副本。这本质上是Redux 想要你做的,不同的是Redux 不需要你有额外的服务层。

      【讨论】:

      • 谢谢!你如何将其设置为只读?目前我有私人 _transactions$: BehaviorSubject = new BehaviorSubject([]);私有只读事务:Observable = this._transactions$.asObservable();
      【解决方案3】:

      我建议你使用像ngrx 这样的状态管理工具。使用商店和效果。它将使您能够了解您的状态如何变化以及何时可以通过效果进行服务调用。

      也可以查看这篇文章for state management in angular。你也可以在google上做一些调查。

      您会遇到ngrx (redux + rxjs) 和redux 作为在Angular 中管理状态的最常用工具。

      【讨论】:

      • 没有那个工具有办法吗?我相对缺乏经验,并且害怕使用可能没有太多用户群/文档的工具(因此,如果我遇到问题,我不想感到寒冷)。
      • 请先学习 redux 基础,然后再回来。如果您打算了解 Angular 应用程序中的状态如何变化,那么值得投资。
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2023-03-11
      • 2018-07-05
      • 1970-01-01
      • 1970-01-01
      • 2018-01-10
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多