取消編輯我有一個gridController as gc
內NG重複,我用它來填充舉表:實現在角
<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>
的NG-重複後的DIV用於有條件地顯示一組如果該任務的屬性edit_active
設置爲true
,則爲按鈕。如果該屬性爲真,則ng-class向該行添加一個自定義類active
,並且如果該類有active
類,則使用css將該行設置爲可編輯。
我有一個自定義指令爲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