Как реализовать кнопку отмены для функции редактирования в angularjs

я использовал кнопку редактирования. после редактирования у меня есть кнопка сохранения и отмены. Кнопка сохранения работает, как я и ожидал, но не кнопка отмены. если я нажму кнопку отмены после попытки редактирования, он должен показать предыдущий текст. кто-нибудь может помочь мне
js fiddle здесь http://jsfiddle.net/F7K63/143/

 <tr ng-repeat="item in items">
        <td>
            <span ng-hide="item.editing">{{item.name}} <button  ng-click="editItem(item)">Edit</button></span>
            <input ng-show="item.editing" ng-model="item.name"  autofocus />
            <button ng-show="item.editing" ng-click="doneEditing(item)">Save</button>
             <button ng-show="item.editing" ng-click="Cancel(item)">Cancel</button>
        </td>
    </tr>

person Thilak Raj    schedule 13.01.2016    source источник
comment
Вы должны сделать копию элемента, который хотите отредактировать. Если вы нажмете «Отмена», замените оригинал копией.   -  person Christoph    schedule 13.01.2016
comment
можете ли вы показать в приведенном выше jsfiddle, пожалуйста   -  person Thilak Raj    schedule 13.01.2016
comment
Эта скрипка может помочь: jsfiddle.net/7Lbjuhsq   -  person pixelbits    schedule 13.01.2016


Ответы (2)


Сделайте копию вашего объекта, который вы хотите отредактировать. Если вы нажмете «Отмена», замените источник. См. скрипту.

$scope.editItem = function (item) {
    item.editing = true;
    item.backupName = angular.copy(item.name);
}

$scope.doneEditing = function (item) {
    item.editing = false;
    delete item.backupName;
    //do some background ajax calling for persistence...
};
$scope.Cancel = function (item) {
    item.editing = false;
    item.name = angular.copy(item.backupName);
    delete item.backupName;
};
person Christoph    schedule 13.01.2016

Самый быстрый вариант — отредактировать функции $scope.eidtItem и $scope.Cancel.

$scope.editItem = function (item) {
    item.editing = true;
    item.oldName = item.name;
}

...

$scope.Cancel = function (item) {
    item.editing = false;
    item.name = item.oldName;
};

http://jsfiddle.net/F7K63/147/

person Michał Kolenda    schedule 13.01.2016
comment
Я включил jsfiddle. Все должно быть в порядке. Пожалуйста, проверь это. - person Michał Kolenda; 13.01.2016
comment
@Christoph item.oldName и item.name являются строками и являются отдельными свойствами объекта элемента. Я думаю, это нормально. Какую проблему вы видите? Вы можете увидеть содержимое объекта элемента здесь: jsfiddle.net/F7K63/148 Вам не нужно используйте angular.copy для копирования одной строки. - person Michał Kolenda; 13.01.2016
comment
Да, вы правы, со строками это не имеет значения. Но я думаю, что это должно работать со всеми объектами;) - person Christoph; 13.01.2016
comment
В этом случае ясно, что мы работаем со строками (значение хранится на входе). Поэтому я думаю, что использование angular.copy - это излишество. - person Michał Kolenda; 13.01.2016