Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/438.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 角度编辑副本的副本_Javascript_Angularjs - Fatal编程技术网

Javascript 角度编辑副本的副本

Javascript 角度编辑副本的副本,javascript,angularjs,Javascript,Angularjs,我在编辑副本时遇到了一些问题 当您第一次编辑记录时,它被分配给$scope.original,并获取一份副本进行编辑并存储在$scope.copy中,该副本可以更改并保存回$scope.original中,而后者又会正确更新$scope.something 问题是,编辑第一条记录时,如果随后复制其中一个值进行进一步编辑,则调用$scope.saveSomething()函数时,该记录不会更新 var myApp=angular.module('myApp',[]); 函数MyCtrl($sco

我在编辑副本时遇到了一些问题

当您第一次编辑记录时,它被分配给
$scope.original
,并获取一份副本进行编辑并存储在
$scope.copy
中,该副本可以更改并保存回
$scope.original
中,而后者又会正确更新
$scope.something

问题是,编辑第一条记录时,如果随后复制其中一个值进行进一步编辑,则调用
$scope.saveSomething()
函数时,该记录不会更新

var myApp=angular.module('myApp',[]);
函数MyCtrl($scope){
$scope.Something=[{
姓名:"是",,
描述:新日期()
}, {
名字:“蜜蜂”,
描述:新日期()
}, {
名称:“见”,
描述:新日期()
}];
//============================第一份
$scope.edit=函数(什么){
$scope.original=什么;
$scope.copy=angular.copy(什么);
}
$scope.save=函数(复制){
复制($scope.copy,$scope.original);
$scope.cancel();
}
$scope.cancel=函数(){
$scope.copy=null;
}
//第二份
$scope.editName=函数(什么){
$scope.originalName=什么;
$scope.copyName=angular.copy(什么);
}
$scope.saveName=函数(){
copy($scope.copyName,$scope.originalName);
$scope.cancelName();
}
$scope.cancelName=函数(){
$scope.copyName=null;
}
}

{{s}json}
编辑



拯救 取消 编辑名称


保存名 取消姓名
您的问题源于您使用的
角度。复制
。在
$scope.saveName
中,目标
$scope.originalName
是一个字符串,这将导致错误

实际上没有理由使用
angular.copy
,如果您使用的是原语。相反,您可以在此处使用以下选项:

//=================== Second copy

$scope.editSomething = function(key, obj) {
    $scope.originalKey = key;
    $scope.originalObj = obj;
    $scope.copyVal = obj[key];
};

$scope.saveSomething = function(newVal) {
    $scope.originalObj[$scope.originalKey] = newVal;
    $scope.cancelEdit();
}

$scope.cancelEdit = function() {
    $scope.originalKey = null;
    $scope.originalObj = null;
    $scope.copyVal = null;
}

我已经设法想出了一个简单的解决办法,这似乎是可行的

如果我传入键和对象的副本,那么就可以正确地更新第一个副本,而不是将原语传递给第二个编辑函数

这是一把小提琴 ... 以及相关的代码位:


有更好的答案吗?

对不起,我认为我在第一个示例中没有明确说明第二次编辑需要在不知道您正在编辑哪个值的情况下完成(在完整的应用程序中,有10+个值可以通过这种方式进一步编辑),我现在更新了代码示例以反映这一点。如果有10+个值可以通过这种方式编辑,这是指令的典型用例,而不是单个控制器。指令将允许您通过利用一个独立的作用域多次使用上述解决方案。
//=================== Second copy

$scope.editSomething = function(key, obj) {
    $scope.originalKey = key;
    $scope.originalObj = obj;
    $scope.copyVal = obj[key];
};

$scope.saveSomething = function(newVal) {
    $scope.originalObj[$scope.originalKey] = newVal;
    $scope.cancelEdit();
}

$scope.cancelEdit = function() {
    $scope.originalKey = null;
    $scope.originalObj = null;
    $scope.copyVal = null;
}