角度でフォーカス要素を設定する方法の例を探した後、それらのほとんどはいくつかの変数を使用して監視してからフォーカスを設定し、ほとんどはフォーカスを設定したいフィールドごとに1つの異なる変数を使用しています。多くのフィールドを持つフォームでは、多くの異なる変数を意味します。
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";
}
それは角度の良い解決策ですか?私の貧しい経験でまだ見られない問題がありますか?