对于第一个问题,你可以看到你摆弄的修订版本,其中包括在 http://css-tricks.com/snippets/javascript/saving-contenteditable-content-changes-as-json-with-ajax/这里http://jsfiddle.net/bonamico/cAHz7/
var myApp = angular.module('myApp', []);
中描述的技术,请注意,VAR对myApp =失踪,所以下面的声明没有执行
myApp.directive('contenteditable', function() {
return {
require: 'ngModel',
link: function(scope, elm, attrs, ctrl) {
// view -> model
elm.bind('blur', function() {
scope.$apply(function() {
ctrl.$setViewValue(elm.html());
});
});
// model -> view
ctrl.render = function(value) {
elm.html(value);
};
// load init value from DOM
ctrl.$setViewValue(elm.html());
elm.bind('keydown', function(event) {
console.log("keydown " + event.which);
var esc = event.which == 27,
el = event.target;
if (esc) {
console.log("esc");
ctrl.$setViewValue(elm.html());
el.blur();
event.preventDefault();
}
});
}
};
});
也 http://api.jquery.com/keydown/
见对于第二个问题,我的建议是尽量减少代码的行NUMER通常不是一个主要关注点,同时使代码的模块化和可维护性是。因此,创建两个指令肯定会更好,并且可能还会为两者之间的共同部分(如果有的话)使用常用的JavaScript函数。
超级谢谢卡罗,这有帮助。 –
ctrl。$ setViewValue(elm.html());在if(esc)块中不需要,因为您正在触发模糊,并且已经在模糊处理程序中始终执行该操作 – felixfbecker