【问题标题】:How to get back to before dirty state of an object in AngularJS如何回到AngularJS中对象的脏状态之前
【发布时间】:2014-12-08 11:17:24
【问题描述】:

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

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

当我点击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>

【问题讨论】:

    标签: javascript angularjs forms dirty-data


    【解决方案1】:

    您需要保留原始对象的副本,使用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;
    }
    

    【讨论】:

    • 由于某种原因,它不起作用。我已经用相关代码更新了帖子。你能看一下吗?谢谢。
    • 使用调试器进行调试时,我可以看到值已更改为前一个值,但视图中没有显示该更改。
    • 我会在几天后回复它。它基本上是表格中的一行正在尝试编辑/取消。
    • 嘿 Mohammad,这里是 plunker plnkr.co/edit/ivMwHzcj320z6cTaILbR?p=preview。谢谢。
    猜你喜欢
    • 2011-07-13
    • 2014-02-10
    • 1970-01-01
    • 2010-12-27
    • 2015-02-23
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多