После поиска примеров того, как установить элементы фокуса с помощью angular, я увидел, что большинство из них используют какую-то переменную для отслеживания, а затем устанавливают фокус, и большинство из них используют одну другую переменную для каждого поля, в котором они хотят установить фокус. В форме с большим количеством полей это подразумевает множество различных переменных.
Имея в виду jquery, но желая сделать это с помощью angular, я сделал решение, в котором мы устанавливаем фокус в любой функции, используя идентификатор элемента, поэтому, поскольку я очень новичок в angular, я хотел бы получить некоторые мнения, если это правильный способ, есть проблемы, что угодно, все, что могло бы помочь мне сделать это лучше в angular.
По сути, я создаю директиву, которая отслеживает значение области, определенное пользователем с помощью директивы, или focusElement по умолчанию, и когда это значение совпадает с идентификатором элемента, этот элемент сам устанавливает фокус.
angular.module('appnamehere')
.directive('myFocus', function () {
return {
restrict: 'A',
link: function postLink(scope, element, attrs) {
if (attrs.myFocus == "") {
attrs.myFocus = "focusElement";
}
scope.$watch(attrs.myFocus, function(value) {
if(value == attrs.id) {
element[0].focus();
}
});
element.on("blur", function() {
scope[attrs.myFocus] = "";
scope.$apply();
})
}
};
});
Вход, который по какой-то причине должен получить фокус, будет делать это
<input my-focus id="input1" type="text" />
Здесь любой элемент для установки фокуса:
<a href="" ng-click="clickButton()" >Set focus</a>
И пример функции, которая устанавливает фокус:
$scope.clickButton = function() {
$scope.focusElement = "input1";
}
Это хорошее решение для angular? Есть ли у него проблемы, которых я пока не вижу?