Как объявить общий метод для множественной директивы в Angularjs

0

У меня есть три строки одинакового кода в нескольких директивах, которые на самом деле выполняют привязку обработчика событий к "фокусу".

var ele = $(event.target);
$($(event.target)).attr('tabindex', -1);
$(ele).trigger('focus');

это создает проблему дублирования кода, создание сервисного или фабричного метода не является правильным способом, так как я имею дело с манипуляциями DOM.

есть ли способ, которым я могу сделать общий метод и передать свою цель и запустить код выше, чтобы избежать дублирования кода.

  • 0
    Вы ищете опцию require в DDO?
  • 1
    Вы можете создать новую директиву только для привязки focus
Показать ещё 3 комментария
Теги:
angularjs-directive

1 ответ

1

Обычно повторение кода в некоторых компонентах, таких как функции 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>
  • 0
    Спасибо, я согласен с вашей точкой зрения, сделав это компонентом независимым, но это повторяется много раз, нужно сделать один раз.
  • 0
    это не повторение, вам нужно применять директиву там, где вам нужно масштабировать tabindex, но код BusinessLogic пишется только один раз ... Директивы являются компонентами с несколькими экземплярами!

Ещё вопросы

Сообщество Overcoder
Наверх
Меню