У меня есть три строки одинакового кода в нескольких директивах, которые на самом деле выполняют привязку обработчика событий к "фокусу".
var ele = $(event.target);
$($(event.target)).attr('tabindex', -1);
$(ele).trigger('focus');
это создает проблему дублирования кода, создание сервисного или фабричного метода не является правильным способом, так как я имею дело с манипуляциями DOM.
есть ли способ, которым я могу сделать общий метод и передать свою цель и запустить код выше, чтобы избежать дублирования кода.
Обычно повторение кода в некоторых компонентах, таких как функции Controllers/Linking, не является плохой идеей, потому что это помогает вам сделать каждый компонент независимым... Это необходимо, когда вы работаете с частями DOM, иначе вы получите непроверенный код !
Если вам нужно делиться поведением... Угловая имеет концепцию директивы, поэтому вы можете делать то, что вам нужно, как угловатое:
angular
.module('test', [])
.directive('scaleTabindex', function() {
return function ScaleTabindexPostLink(iScope, iElement, iAttributes) {
function scaleTabindex(event) {
var index = Number(iElement.attr('tabindex'));
return iElement.attr('tabindex', index - 1);
}
iElement.bind('focus', scaleTabindex);
};
})
;
<script src="https://ajax.googleapis.com/ajax/libs/angularjs/1.2.23/angular.min.js"></script>
<article ng-app="test">
<button tabindex="100" scale-tabindex>Button 1</button>
<button tabindex="100" scale-tabindex>Button 2</button>
<button tabindex="100" scale-tabindex>Button 3</button>
</article>
require
в DDO?focus