我想在关注每个元素时调用一个事件。
但是我认为在每个元素上设置ngFocus指令并不好,因为它们可能有很多。
如何在运行时向每个元素添加焦点事件处理程序?
<ng-form name="myForm">
<p><label>name1: </label><input type="text" name="name1" ng-focus="onFieldFocus(myForm, 'name1')"/></p>
<p><label>name2: </label><input type="text" name="name2" ng-focus="onFieldFocus(myForm, 'name2')"/></p>
</ng-form>
var app = angular.module('plunker', []);
app.controller('MainCtrl', function($scope) {
$scope.name1 = 'text1 here';
$scope.name2 = 'text2 here';
$scope.result = "Nothing";
$scope.onFieldFocus = function (_formCtrl, _fieldName) {
$scope.result = "field "+_fieldName+" of form "+_formCtrl.$name+" was focused";
}
});
我想将angular.element
和$scope.myForm
与for myForm
元素一起使用,而不是以$
开头,类似于此:
for (var i in $scope.myForm) {
console.log(i);
$scope.result += "1";
if ($scope.myForm.hasOwnProperty(i)) {
var property = $scope.myForm.i;
if(property.charAt(0) != '$') {
$scope.result += property+", ";
}
}
}
答案 0 :(得分:1)
我认为 可以在每个元素上设置ngFocus。 AngularJS是声明性的,因此您希望在相关元素上显式声明行为,而不是在其他地方强制设置它。
如果您不想通过在每个表单元素上放置ngFocus指令来重复自己,那么我将创建一个应用于ngForm元素的指令(称为onFieldFocus或其他)。该指令的行为是将ngFocus指令应用于作为表单后代的每个输入。