javascript - CRUD AngularJS 应用程序的撤消/重做实现

标签 javascript angularjs undo undo-redo

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

关于实现此目标的最佳策略有什么建议吗?

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

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

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

最佳答案

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

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

如果你撤消,比如说 2 个 Action ,然后开始一个新的 Action ,那么 2 个最多的状态将被移除,新的状态将被推进。

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

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

关于javascript - CRUD AngularJS 应用程序的撤消/重做实现,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18308901/

相关文章:

javascript - 成功后执行 2 个异步函数

javascript - 如何撤消最后选中的复选框?

iphone - 如何将 NSUndoManager 与 UIImageView 或 CGContext 一起使用

AngularJS ng-repeat with ng-change

javascript - 使用 Angularjs 为段落动态创建按钮

Git 恢复不工作

使用函数声明的 JavaScript 闭包

javascript - Dir步行获取各种文件的abs路径数组

javascript - 当将服务注入(inject)(导入)到我的构造函数中时,出现 "No provider"错误

angularjs - 更新 Angular 中的 Controller /UI 元素