Я новичок в угловой, и я пытаюсь написать директиву многократного использования, чтобы установить фокус на элементы внутри некоторого родителя.Многоразовая угловая директива для установки фокуса на элементы ввода
<div class="products" ng-controller="productsController" id="products" >
Name
<input type="text" ng-model="name" tabindex="1" focus-element />
Price
<input type="text" ng-model="price" tabindex="2" focus-element />
</div>
.directive('focusElement', function() {
return {
restrict: 'A',
link: function($scope, $element, attrs) {
var fE = function() {
if ($element[0].value === '') {
var elms = document.getElementsByTagName('body')[0].getElementsByTagName("input");
var alredyFocused = false;
for (var i = 0; i < elms.length; i++) {
if (elms[i].value === '' && Number(elms[i].getAttribute("tabindex")) < attrs.tabindex) {
alredyFocused = true;
continue;
}
}
if (!alredyFocused) {
$element[0].focus();
}
}
}
fE();
//...some other logic
}
}
});
В этом коде я ищу элементы ввода внутри всего тела, которое является неправильным. Как ограничить директиву родительским div (контроллером), если я хочу, чтобы директива была повторно использована (Id или класс или html внутри div будут отличаться от div к div)?
Я попытался написать директиву для самого div, чтобы установить фокус на первом из своих детей, который не имеет значения, но в этом случае я не могу использовать ng-модель каждого элемента ввода, чтобы отслеживать изменения модели (с использованием $scope.$watch("?ngModule attribute from an input which is many?", function() {})
).
Спасибо, но мне нужно, чтобы установить фокус на любой вход, который пуст (не имеет значения), а не делать что-то, когда элемент получает фокус. Извините за непонятное объяснение проблемы, я отредактировал вопрос. – Elistan