在 Angular 中的键上绑定函数

Bind function on key up in Angular

我是一名 designer/front-end 开发人员,对 Angular 几乎没有经验,所以我希望能在这里得到一些帮助。我有以下 html

<div class="dropdown">
<div class="options"></div>
  <div class="add">
    <i id="add-issue-plus" class="icon-plus" data-ng-click="addIssue($event)"></i>
    <input id="add-issue-field" data-ng-model="newIssueName" type="text" placeholder="Create a new issue"/>
  </div>
</div>

如果用户在后续输入中按回车键,我想从 <i> 元素触发点击事件。我想以最简单的方式做到这一点,而无需编写单独的函数。有 Angular 经验的人知道最好的方法吗?我知道我可以轻松使用 jQuery 并执行类似的操作:

$('#add-issue-field').keypress(function(e){
   var key = e.which;
   if (key === 13) {
      $('#add-issue-plus').click();
        return false;
  }
 });

但我想知道是否有人提供更有效方法的提示。

最好的用途是指令。这是一个例子。

app.directive('checkKey', function() {
    return {
        restrict: 'A',
        link: function(scope, elem, attrs) {
            elem.bind('keyup', function(event) {
                if (event.keyCode === 13) {
                    event.preventDefault();
                    return false;
                }
            });
        }
    }
});

然后将指令添加到您的输入元素

<input type="text" checkkey />

我觉得你的想法很接近。不过,还有更多以 angular 为中心的方式来做到这一点:

如果您查看 #add-issue-plus 元素,您会看到一个名为 data-ng-click 的属性,这就是将方法绑定到 angular 中元素的方式。要绑定到按键,您可以使用 data-ng-keypress https://docs.angularjs.org/api/ng/directive/ngKeypress。然后找到 addIssue 方法所在的控制器,并创建一个新方法来执行类似于上面 jQuery 所做的事情。评估按下的键并直接从上面调用 addIssue 方法。

虚拟 html:

<div class="options">
  <div class="add">
    <i id="add-issue-plus" class="icon-plus" data-ng-click="addIssue($event)"></i>
    <input id="add-issue-field" data-ng-keypress="onKeypress($event)" data-ng-model="newIssueName" type="text" placeholder="Create a new issue"/>
  </div>
</div>

...然后在 angular 控制器的某处:

$scope.onKeypress = function(event) {
  var key = e.which;
  if (key === 13) $scope.addIssue(event);
};

I have written on this exact directive in the past. 您甚至可以创建一个接受键码和事件的指令,从而使您的指令也更有用。

angular.module("myApp").directive('dlKeyCode', dlKeyCode);

  function dlKeyCode() {
    return {
      restrict: 'A',
      link: function($scope, $element, $attrs) {
        $element.bind("keypress", function(event) {
          var keyCode = event.which || event.keyCode;

          if (keyCode == $attrs.code) {
            $scope.$apply(function() {
              $scope.$eval($attrs.dlKeyCode, {$event: event});
            });

          }
        });
      }
    };
  }

在您的 HTML 中,您可以执行以下操作:

<div class="form">
    <input type="text" code="13" dl-key-code="closeModalWindow();" />
    <input type="text" code="24" dl-key-code="submitInformation();" />
</div>