【问题标题】:Does Angular2 have an equivalent of $documentAngular2 是否有相当于 $document
【发布时间】:2016-05-03 15:28:52
【问题描述】:

我已经开始研究 Angular2 并且有了 3 个嵌套组件的基本功能。但是我无法弄清楚如何向文档添加按键处理程序。

如果不是,我将如何监听文档上的按键并对其做出反应? 需要明确的是,我需要响应文档本身的 kepyress,而不是输入。

在 Angular 1 中,我会创建一个指令并使用 $document;像这样:

 $document.on("keydown", function(event) {

      // if keycode...
      event.stopPropagation();
      event.preventDefault();

      scope.$apply(function() {            
        // update scope...          
      });

但我还没有找到 Angular2 的解决方案。

【问题讨论】:

    标签: angular


    【解决方案1】:

    你可以这样做:

    @Component({
      host: {
        '(document:keyup)': '_keyup($event)',
        '(document:keydown)': '_keydown($event)',
      },
    })
    export class Component {
      private _keydown(event: KeyboardEvent) {
        let prevent = [13, 27, 37, 38, 39, 40]
          .find(no => no === event.keyCode);
        if (prevent) event.preventDefault();
      }
      private _keyup(event: KeyboardEvent) {
        if (event.keyCode === 27) this.close();
        else if (event.keyCode === 13) ...;
        else if (event.keyCode === 37) ...;
        else if (event.keyCode === 38) ...;
        else if (event.keyCode === 39) ...;
        else if (event.keyCode === 40) ...;
    
        // else console.log(event.keyCode);
      }
    }
    

    顺便说一句,Angular 团队有一些有趣的ideas about keyboard events,不确定目前的状态如何。甚至有可能it's working,我自己没试过:)

    【讨论】:

    • 我之前没见过document:keyup 语法。你有这方面的参考资料,以便我了解更多信息吗?
    • @MarkRajcok 不确定我第一次在哪里找到它。我知道我在官方Developer Guides 看到了<input #box (keyup.enter)="values=box.value"> - 寻找关键事件过滤...我会试着找到我在哪里得到document:_event_ 语法。例如,也适用于 window:click
    • @MarkRajcok 前段时间我在寻找“点击外部”,我找到了Angular2 Modal 的代码。之后,我查看了key_events 的源代码,并通过一些实验得到了这种语法......
    • 所以差不多 2 个月后我找到了它... 深埋在 DirectiveMetadata 的 API 文档中,under the host property 我们发现这些话:“要监听全局事件,必须将目标添加到事件名称。目标可以是windowdocumentbody。"
    • 主机属性的链接已更改:angular.io/docs/ts/latest/api/core/…(我希望有办法编辑 cmets)。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2016-04-05
    • 2017-09-21
    • 2017-01-08
    • 2016-02-15
    • 2010-10-16
    • 2023-04-04
    • 2016-02-25
    相关资源
    最近更新 更多