Después de buscar ejemplos de cómo establecer elementos de enfoque con angular, vi que la mayoría de ellos usa alguna variable para observar y luego establecer el enfoque, y la mayoría de ellos usa una variable diferente para cada campo en el que quieren establecer el enfoque. En una forma, con muchos campos, eso implica muchas variables diferentes.
Con jquery en mente, pero queriendo hacer eso de manera angular, hice una solución que establecemos el foco en cualquier función usando la identificación del elemento, así que, como soy muy nuevo en angular, me gustaría obtener algunas opiniones si de esa manera es correcto, tengo problemas, lo que sea, cualquier cosa que pueda ayudarme a hacer esto de la mejor manera en angular.
Básicamente, creo una directiva que observa un valor de alcance definido por el usuario con la directiva, o el focusElement predeterminado, y cuando ese valor es el mismo que el ID del elemento, ese elemento establece el foco en sí.
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();
})
}
};
});
Una entrada que necesita enfocarse por alguna razón, lo hará de esta manera
<input my-focus id="input1" type="text" />
Aquí cualquier elemento para establecer el foco:
<a href="" ng-click="clickButton()" >Set focus</a>
Y la función de ejemplo que establece el enfoque:
$scope.clickButton = function() {
$scope.focusElement = "input1";
}
¿Es una buena solución en angular? ¿Tiene problemas que con mi mala experiencia todavía no veo?