【问题标题】:Submitting data using ngrx effects or a component使用 ngrx 效果或组件提交数据
【发布时间】:2019-01-30 15:25:34
【问题描述】:

我们在这里和我的一个朋友讨论过一个关于“如果点击表单的提交按钮会发生什么”的任务? 要求是首先使用 ngrx 存储中的数据验证该表单,然后将该数据提交到服务器。

...所以有两种方法:

  • 使用ngrx/effects 将在发送“SUBMIT_ACTION”时触发。它将获取数据然后通过服务调用API

  • 使用组件 - 它将“获取(1)”配置,验证一切正常,然后通过服务调用 API

据我所知,在这种情况下使用效果是很常见的事情。你怎么看?

【问题讨论】:

  • 不要认为该逻辑的位置应该在组件中。通常我会把它放在一个从效果中调用的服务中。实际上,您还可以从状态中获取所需的任何数据(可能使用 withLatestFrom 之类的数据)。
  • 他们甚至在official example app中这样做

标签: angular ngrx ngrx-effects


【解决方案1】:

这个问题可能没有正确答案。 我个人不喜欢将验证推入商店。我更喜欢使用 Angular 的内置验证工具来验证我的表单。 对于我当前的项目,我们使用响应式表单来验证输入,然后使这些表单与商店保持同步。 (此外,我们正在同步有效、已触摸、待处理、错误等属性)

一个优点是您可以从基本上任何地方提交表单,或者将它们拆分成更小的部分并在将它们发送到服务器之前将它们合并。 而且您可以编写可重用的角度组件,这些组件与底层存储架构无关,并且可以轻松重构。要将表单绑定到商店,您可以使用服务或抽象类。

简短示例:

  • 响应式表单验证输入
  • 表单数据与存储同步(包括是否有效、未决、错误)
  • UI 元素(提交按钮/表单禁用/微调器)链接到有效/待定属性
  • “SUBMIT_ACTION”被调度并将状态更改为pending=true
  • effect 正在等待答案并发送“SUBMIT_ACTION_ERROR”或“SUBMIT_ACTION_SUCCESS”
  • 显示错误或显示成功通知

【讨论】:

    【解决方案2】:

    我认为这个问题没有正确答案,这完全取决于您作为开发人员的工作是选择正确的解决方案。

    就个人而言,如果它是一个简单的形式,我会这样做:

    • 验证表单是否填写正确(客户端验证)
    • 使用(可序列化的)表单对象发送保存操作,这不是 Angular 的表单,而只是一个 JavaScript 对象
    • 在效果中监听此操作并调用服务
    • 如果出现问题:显示消息(通知、烤面包机、小吃店……)
    • 如果一切正常:关闭表单

    【讨论】:

      猜你喜欢
      • 2020-03-28
      • 2018-01-11
      • 2017-08-27
      • 2019-05-01
      • 2017-07-18
      • 1970-01-01
      • 2018-06-20
      • 2023-02-04
      • 1970-01-01
      相关资源
      最近更新 更多