Angularjs有条件地编辑模型

时间:2014-05-13 15:18:12

标签: javascript angularjs

这似乎是一个愚蠢的问题,但我是网络/角度编程的新手,甚至不知道如何谷歌它。如果我有一个用户可以使用表单编辑的模型,我该如何让用户取消编辑?

我是否在编辑之前备份旧值,还是创建模型的副本并让用户编辑它?在第一种情况下,如果用户取消编辑,我想我必须将备份的值复制回更改的模型?在第二种情况下,如果用户接受编辑,我将获得已更改的模型的新副本。指向它的模型的其他部分将需要更新。

在伪代码中:

foo->bar  // foo is a bigger model and user wants to edit bar
barCopy = bar.copy();  // I realize copy() is not-so-trivial thing
open a form on bar
if edits are cancelled, bar needs to be updated with barCopy

open a form on barCopy
if edits are accepted, foo (and others) is pointing at an out of date bar

有比这些更好的选择吗?如果没有,是否有一个关于角度做哪个做的约定?我没有看到在语言层面进行复制的好方法 - 谷歌搜索这个主题会产生大量的讨论和this very up-voted answer。令人不安的是,我需要做的这件基本事情包含了如此多的奇怪科学。这让我觉得必须有一个更简单的方法。

1 个答案:

答案 0 :(得分:1)

通常,在我的包含表单输入的控制器中,我有一个表单输入本身的模型,当用户“保存”时,我会更新实际模型(并在后台保留)。所以:

$scope.viewModel = {
   myModel: {name:'test'},
   formInputs: {nameInput: ''}
};

$scope.edit = function(){
   $scope.viewModel.formInputs.nameInput = $scope.viewModel.myModel.name;
}

$scope.save = function(){
   $scope.viewModel.myModel.name = $scope.viewModel.formInputs.nameInput;
}

$scope.cancelEdit = function(){
   $scope.viewModel.formInputs.nameInput = '';
}