最初の質問については、 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/も参照して
ください。
2 番目の質問については、通常、コードの行数を最小限に抑えることは主な関心事ではありませんが、コードをモジュール化して保守しやすくすることは重要です。したがって、2 つのディレクティブを作成し、2 つのディレクティブに共通する部分がある場合は、共通の JavaScript 関数を作成することをお勧めします。