Я пытаюсь выполнить встроенное редактирование в форме с помощью директивы Angular, к сожалению, я столкнулся с двумя проблемами, и я не могу их обойти, поэтому будет очень полезно второе мнение.
Вот скрипка: http://jsfiddle.net/jorgecas99/bc65N/
Вопрос 1: Как видите, я добавил раздел, который должен прослушивать нажатия клавиш (в данном случае клавишу esc) и выходить из режима редактирования, к сожалению, он не работает. Я попытался прослушать клавишу 13, которая является «вводом», и она сработала нормально, поэтому я не понимаю.
Вопрос 2: я хотел бы изменить второе поле на раскрывающееся, когда вы щелкаете его, чтобы редактировать его, не создавая новую директиву, возможно ли это? Я, конечно, забочусь о количестве строк кода, поэтому, если этого можно добиться с помощью одной директивы, то это будет моим предпочтительным вариантом.
Спасибо!
1 ответ
Для первого вопроса вы можете увидеть исправленную версию вашей скрипки, которая включает технику, описанную в http: // css-tricks. com / snippets / javascript / save-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/
Что касается второго вопроса, я бы предположил, что минимизация количества строк кода обычно не является основной проблемой, в то время как создание модульного и поддерживаемого кода - это так. Поэтому было бы определенно лучше создать две директивы и, возможно, общую функцию javascript для общих частей между ними, если таковые имеются.
Похожие вопросы
Новые вопросы
angularjs
Используйте для вопросов об AngularJS (1.x), JavaScript-фреймворке с открытым исходным кодом. НЕ используйте этот тег для Angular 2 или более поздних версий; вместо этого используйте тег [angular].