Depois de procurar exemplos de como definir elementos de foco com angular, vi que a maioria deles usa alguma variável para observar e definir o foco, e a maioria deles usa uma variável diferente para cada campo em que deseja definir o foco. Em um formulário, com muitos campos, isso implica em muitas variáveis diferentes.
Com o jquery way em mente, mas querendo fazer isso de forma angular, fiz uma solução que colocamos o foco em qualquer função usando o id do elemento, então, como sou muito novo em angular, gostaria de obter algumas opiniões se desse jeito é certo, tenho problemas, enfim, qualquer coisa que pudesse me ajudar a fazer isso da melhor forma no angular.
Basicamente, eu crio uma diretiva que observa um valor de escopo definido pelo usuário com a diretiva, ou o focusElement padrão, e quando esse valor é o mesmo que o id do elemento, esse elemento define o próprio foco.
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();
})
}
};
});
Uma entrada que precisa de foco por algum motivo, fará desta forma
<input my-focus id="input1" type="text" />
Aqui, qualquer elemento para definir o foco:
<a href="" ng-click="clickButton()" >Set focus</a>
E a função de exemplo que define o foco:
$scope.clickButton = function() {
$scope.focusElement = "input1";
}
Essa é uma boa solução em angular? Ele tem problemas que eu ainda não vejo com minha experiência ruim?