13

我有一个从我的服务中检索到的用户列表。当我选择任何用户时,我可以查看和编辑信息(电子邮件、角色等)。问题是我不希望这些更改影响列表中的用户数据,我只想在保存后更新数据(单击按钮)。

现在我使用两个变量:

$scope.selected- 当前选定的用户
$scope.editable- 用于存储我正在编辑的数据的变量

我交换这样的数据:

$scope.initEditable = function () 
{
    $scope.editable = {};
    $.extend($scope.editable, $scope.selected);
}

看起来像一个可怕的解决方案。正确的方法是什么?

4

1 回答 1

15

实际上,这是解决此问题的 Angular 方式,您走在正确的轨道上。在像您这样的情况下,通常会:

  • 选择时复制项目(编辑开始) - 这就是您所做的editable
  • 有 2 路数据绑定更改副本(或原始元素)
  • 编辑完成后,我们可以将更改从副本传播到原始

这种模式的好处是我们可以很容易地:

  • 提供“取消”功能,用户可以在其中恢复他们的更改
  • 能够基于此比较比较副本与 UI 的原始和驱动部分(例如,如果没有更改,我们可以禁用“保存”按钮)

所以,我根本不认为这种方法很糟糕。我唯一的建议是使用 angular 的angular.copy 方法而不是$.extend.

于 2012-11-19T11:02:49.860 回答