如何在运行时在元素上设置ngFocus指令?

时间:2014-11-04 14:19:21

标签: javascript angularjs angularjs-directive

我想在关注每个元素时调用一个事件。

但是我认为在每个元素上设置ngFocus指令并不好,因为它们可能有很多。

如何在运行时向每个元素添加焦点事件处理程序?

Plunkr

<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+", ";
      }
    }
  }

1 个答案:

答案 0 :(得分:1)

我认为 可以在每个元素上设置ngFocus。 AngularJS是声明性的,因此您希望在相关元素上显式声明行为,而不是在其他地方强制设置它。

如果您不想通过在每个表单元素上放置ngFocus指令来重复自己,那么我将创建一个应用于ngForm元素的指令(称为onFieldFocus或其他)。该指令的行为是将ngFocus指令应用于作为表单后代的每个输入。