1

我想知道AngularJS中是否有办法在对象变脏之前恢复它的状态。

我有一个简单的用例,其中有一个,edit按钮。如果有人单击编辑按钮,获取相关对象的状态,然后单击取消按钮,我希望对象的状态恢复到其先前的状态(变脏之前的状态)。savecancel

在我点击cancel按钮的那一刻,对象的状态看起来发生了变化,即使它实际上没有。

我可以通过AngularJS提供的一些功能以某种方式实现它吗?

与给定帖子相关的代码:

控制器中的代码:

$scope.uneditedObject = null;
$scope.handleEdit = function(state, index) {
    $scope.uneditedObject = angular.copy($scope.objects[index]);
    $scope.state = state;
    $scope.index = index;
    if(state == 'VIEW') {
        $scope.objects[index] = $scope.uneditedObject
        $scope.uneditedObject = null;
    }
}

HTML 代码:

<tr ng-repeat="object in objects">
    <td ng-class="{'editing': $index == index}" >
        {{object.name}}
    </td>
    <td >
        <input type="text" numbers-only class="form-control" ng-model="object.discount" >
    </td>
    <td  ng-class="{'editing': $index == index}" >
        <a class="btn btn-sm red" ng-click="handleEdit('EDIT', $index)" ng-show="state != 'EDIT'">
            Edit
        </a>
        <a class="btn btn-sm blue" ng-show="state == 'EDIT'" ng-show="state != 'EDIT'" ng-click="update(...)">
            Save
        </a>
        <a class="btn btn-sm default" ng-show="state == 'EDIT'" ng-click="handleEdit('VIEW', $index)">
            Cancel
        </a>
    </td>
</tr>
4

1 回答 1

2

您需要保留原始对象的副本,请使用angular.copy()

$scope.originalItem=null;
$scope.onEdit = function(item){
   $scope.originalItem = angular.copy(item);
   $scope.item = item;
}

$scope.onEditCancel=function(){
   $scope.item = $scope.originalItem;
   $scope.originalItem=null;
}
于 2014-12-08T11:21:46.130 回答