2015-03-06 4 views
0

У меня есть эта директива, которая фокусируется на поле ввода, когда она появляется, и скрывает ее, когда она теряет фокус, или нажата клавиша esc/enter/tab. Он работает отлично, но я хотел знать, есть ли способ передать массив или объект ключей (и типы событий) вместо жесткого кодирования ключей и событий в самой директиве? Вот код:Передача массива в угловую директиву

.directive('bindKeys', function ($timeout) { 

    return { 
     restrict: 'A', 
     scope: { 
      trigger: '=' 
     }, 

     link: function(scope, elem){ 

      elem.bind('keydown keypress blur', function (event) { 
        if(event.which === 13 || event.which === 9 || event.which === 27 || event.type === 'blur') { 
         event.preventDefault(); 
         $timeout(function(){ 
          scope.trigger.property = false; 
         }); 
        } 
       }); 
      scope.$watch('trigger.property', function(value) { 

       if(value === true) { 
        $timeout(function() { 
         elem[0].focus(); 
        }); 
       } 
      }); 
     } 
    }; 
}); 

элемент выглядит следующим образом:

<input bindKeys trigger='trigger'></input> 

Благодаря

+0

вы можете передать свой конфигурационный массив как Атрибут – MamaWalter

ответ

1

Вы уверены, что можете. У некоторых модулей обеспечивают ваш массив

.value('events', ['blur', 'keypress']) 

А затем их вводят в вас директиву (события имя переменной должно совпадать с ключом выше).

.directive('bindKeys', function ($timeout, events) { 
    // ... 
    element.bind(events.join(' '), function() {}) 
} 

Альтернативный синтаксис, чтобы ввести ваш массив является явно задать имена вары

.directive('bindKeys', ['$timeout', 'events', function ($timeout, events) {})

Смотрите больше на инъекции зависимостей здесь: https://docs.angularjs.org/guide/di

и модулей здесь: https://docs.angularjs.org/guide/module

+0

Извините, на это потребовалось столько времени, чтобы ответить, но это было именно то, что я искал. – Lazloman

Смежные вопросы