【问题标题】:Undo/Redo implementation for a CRUD AngularJS appCRUD AngularJS 应用程序的撤消/重做实现
【发布时间】:2013-08-20 23:03:23
【问题描述】:

我们正在考虑在 AngularJS 中构建一个类似 Excel 的应用程序,我们希望在其中支持对单元格编辑的撤消/重做。

对实施此策略的最佳策略有何建议?

我不只是想撤消刚刚在文本框中输入的文本。我的意思是在多个单元格中输入数据,然后撤消每个条目。

我已经尝试在每次修改之前将当前模型推送到堆栈上。这使得可以通过将模型恢复到以前的状态来撤消。但是,如何将其与 REST CRUD 交互结合起来?

解决 CRUD 的“自然”方式是针对每次修改立即对后端进行 REST 调用(更新数据库)。但是撤消只会修改 Angular 中的模型,而不是数据库。并且没有简单的方法通过 REST 发布两个模型之间的增量。

【问题讨论】:

  • 如果单元格只是输入字段,那么 CTRL+Z 和 CTRL+SHIFT+Z 将对这些字段进行撤消重做。
  • @jcubic 我已经澄清了我的问题。
  • 我已经从问题中删除了对 ember 的任何引用,因此它应该完全符合主题。
  • 嗨 Klas,请尝试阅读有关命令处理器模式的信息。一般来说,对于命令处理器,您(在 angularJS 的情况下为控制器)将创建一个命令(在 excel 上写入)并发送到一个命令处理器,该命令处理器将存储命令并执行它。在撤消的情况下,您可以要求命令处理器撤消操作。
  • 我在这里介绍 AngularJS 纪念品工厂:stackoverflow.com/a/45435927/1122851

标签: javascript angularjs undo undo-redo


【解决方案1】:

我认为这不是 angular-js 特有的功能,而是通过捕获状态来实现的。

您的操作(例如编辑、添加、移动单元格等)都会改变您应用的状态,这些状态的增量可以推送到可以回滚的结构上。

如果您撤消,比如说 2 个动作,然后开始一个新的动作,那么最多 2 个状态将被删除,新的状态将被推送。

Photoshop 等应用程序存储与此类似的历史记录(出于类似原因,不允许无限制撤消)。

尽管如此,我仍然认为这是不应绑定到 Angular 框架的功能,但您显然可以将其作为 Angular 服务提供。

【讨论】:

  • 好的,但我认为这可能是可以与数据绑定集成的东西。我是 Angular 新手,所以不幸的是,它如何作为 Angular 服务提供并不明显。
猜你喜欢
  • 2011-04-03
  • 2015-07-28
  • 2011-03-10
  • 1970-01-01
  • 2015-03-30
  • 2021-06-04
  • 2013-03-31
  • 2018-08-20
  • 2016-02-18
相关资源
最近更新 更多