在寻找如何使用Angular设置焦点元素的示例后,我发现大多数人使用某些变量来监视并设置焦点,并且他们使用一个不同的变量来设置每个想要设置焦点的字段。 在一个有很多字段的表单中,这意味着有很多不同的变量。
考虑到jquery的方式,但希望以angular的方式实现,我创建了一种解决方案,可以在任何函数中使用元素的id来设置焦点,因此,由于我刚开始接触angular,我想得到一些意见,以确定这种方法是否正确,是否存在问题,或者任何其他有助于更好地使用Angular进行此操作的东西。
基本上,我创建了一个指令,该指令监视由用户使用指令定义的作用域值,或者默认的focusElement,并且当该值与元素的id相同时,该元素会自动设置焦点。
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解决方案吗?它有什么问题,是由于我的经验不足而我还没有看到的吗?