【发布时间】:2014-10-25 03:00:43
【问题描述】:
在查找了如何使用 angular 设置焦点元素的示例后,我发现他们中的大多数使用一些变量来监视然后设置焦点,并且大多数人为他们想要设置焦点的每个字段使用一个不同的变量。在一个包含很多字段的表单中,这意味着很多不同的变量。
考虑到 jquery 方式,但想以角度方式做到这一点,我提出了一个解决方案,我们使用元素的 id 在任何函数中设置焦点,所以,由于我在角度方面非常新,我想得到一些意见,如果这种方式是正确的,有问题,无论如何,任何可以帮助我在角度上更好地做到这一点的东西。
基本上,我创建一个指令来监视用户使用指令或默认的 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";
}
这是一个好的角度解决方案吗?它是否存在我尚未看到的糟糕体验的问题?
【问题讨论】: