【问题标题】:Enter event not working for angularjs输入事件不适用于 angularjs
【发布时间】:2016-01-12 19:47:31
【问题描述】:

我在模态对话框中为回车键创建了一个事件,但由于某种原因它无法正常工作。

  (function () {
        'use strict';

        var app = angular.module('myModule')
        .directive('ngEnterKey', function() {
            return function(scope, element, attrs) {

                element.bind("keydown keypress", function(event) {
                    var keyCode = event.which || event.keyCode;

                    // If enter key is pressed
                    if (keyCode === 13) {
                        scope.$apply(function() {
                            // Evaluate the expression
                            scope.$eval(attrs.dlEnterKey);
                        });

                        event.preventDefault();
                    }
                });
            };
        });

 <div ngEnterKey="logout()">
...
<a href="#" data-ng-click="logout()">Yes </a>
<a href="#" data-ng-click="cancel()">No </a>
...
 </div>

我不确定为什么没有触发该事件。注销方法在按钮单击时正常工作。

【问题讨论】:

  • dlEnterKey 的属性是什么?它也应该是&lt;div ng-enter-key - 而不是ngEnterKey
  • 抱歉打错了。它是 scope.$eval(attrs.ngEnterKey);
  • 对自定义指令使用 ng- 前缀的不良做法。最好为角核心保留它,这样就不会出现潜在的未来冲突,而且以后有人在进行维护时不会认为它是核心 API 的一部分

标签: javascript angularjs


【解决方案1】:

将您的元素更改为:

<div ng-enter-key="logout()">

用于触发要使用的指令的属性必须遵循一定的约定。

根据docs for directives

Angular 规范化元素的标签和属性名称,以确定哪些元素匹配哪些指令。我们通常通过区分大小写的 camelCase 规范化名称(例如 ngModel)来引用指令。然而,由于 HTML 不区分大小写,我们在 DOM 中以小写形式引用指令,通常在 DOM 元素上使用破折号分隔的属性(例如 ng-model)。

归一化过程如下:

  • 从元素/属性的前面去除 x- 和 data-。
  • 将 :、- 或 _ 分隔的名称转换为 camelCase。

此外,为任何类型使用“ng-”前缀可能不被认为是一种好的形式,除非您打算将此类型直接贡献给角度源。

【讨论】:

  • 采纳您的建议,我在 Javascript 中将其更改为 daEnterKey,在 HTML 中将其更改为 da-Enter-Key。但是它仍然无法正常工作。它与我在模态对话框中使用它的事实有什么关系吗?
  • “但是,由于 HTML 不区分大小写,我们在 DOM 中以小写形式引用指令”。将其设为小写。
猜你喜欢
  • 2018-04-18
  • 1970-01-01
  • 2016-04-16
  • 1970-01-01
  • 2023-03-24
  • 1970-01-01
  • 2020-10-01
  • 2018-09-08
  • 1970-01-01
相关资源
最近更新 更多