У меня есть нг-повтор внутри gridController as gc
, который я использую для заполнения Bootstrap таблицы:Реализация отменить редактирование в угловых
<div ng-repeat="(id, task) in gc.modelFilter(model.getModelAsDict())">
<div ng-show="model.getTask(id).edit_active" class="row">
<div class="col-sm-12">
<button type="button" class="btn btn-danger" ng-click="showDeleteModal(id)">Delete</button>
<button type="button" class="btn btn-default" ng-click="gc.save(task)">Save</button>
<button type="button" class="btn btn-default" ng-click="gc.cancel(task)">Cancel</button>
</div>
</div>
<div class="row datacell" ng-class="{'active': model.getTask(id).edit_active}">
<div class="col-sm-1"><p contenteditable="true" ng-model="task.case_name"></p></div>
<div class="col-sm-1"><p contenteditable="true" ng-model="task.title"></p>
....
</div>
</div>
В DIV после нг-повтора используется условно показан набор кнопок, если эта задача имеет свойство edit_active
, установленное на true
. Если это свойство истинно, ng-class добавляет пользовательский класс active
к строке, и я использую css для создания этой строки как редактируемой, если она имеет класс active
.
У меня есть пользовательский директиву contenteditable
:
app.directive("contenteditable", function() {
return {
restrict: "A",
require: "ngModel",
link: function(scope, element, attrs, ngModel) {
function read() {
ngModel.$setViewValue(element.html());
}
ngModel.$render = function() {
element.html(ngModel.$viewValue);
};
element.bind("blur keyup change", function() {
scope.$apply(read);
});
function setRowActive(id) {
scope.model.getTask(id).edit_active = true;
}
element.bind("click", function() {
console.log('editing row id ' + scope.id);
scope.$apply(setRowActive(scope.id));
});
}
};
});
Это все работает хорошо, так как позволяет пользователю щелкнуть по строке Bootstrap и отредактировать значение. Процесс сохранения прост. Однако я пытаюсь определить, как реализовать процесс отмены. если пользователь нажал на строку и редактировал поле.
К моменту, когда я добрался до функции gc.cancel()
, значение модели было обновлено, и все, что у меня есть, - это измененное значение. Как восстановить исходное значение?
В директиве можно только скопировать модель и вернуться обратно сверху отмена. Если вы можете переместить свою директиву в компонент (что вам нужно), вы можете использовать одностороннее связывание данных с крюком $ onChanges – gyc