Angular2:指令加载但不执行任何操作

时间:2017-03-31 20:54:55

标签: javascript html angular typescript

编辑:我发现了问题。你知道结果是什么吗? Chrome缓存问题。 Chrome缓存了一些东西,直到我在调试器打开并关闭我的页面时关闭了缓存,我无处可去。一旦我精神焕发,我开始抓住事件。

原帖: 我有一个自定义Angular指令,它应该对三个事件中的任何一个进行控制:onloadonbluronfocus。它适用于input控件,可以禁用也可以不禁用。我知道onbluronfocus在禁用控件上没用,但我想在听取从未出现的事件时没有任何害处。另一方面,启用的控件将触发这些事件,因此我需要倾听。该指令设计得相当通用,因此它需要处理禁用和启用input控件。

问题是,它什么也没做。至少,它似乎没有做任何事情。该指令被实例化 - 我已经验证构造函数已经启动,并且我已经验证elementRef指向输入控件 - 但这就是它。没有听众工作。

用法:

<input myDirective disabled id="someId" name="someName" [ngModel]="myValue" />

指令:

import { Directive, HostListener, ElementRef, Input } from "@angular/core";

@Directive({ selector: "[myDirective]" })
export class MyDirective {
    constructor(private elementRef: ElementRef) {
    }

    @HostListener("focus", ["$event.target.value"])
    onFocus(value: string) {
        console.log("MyDirective: Focus caught.");
    }

    @HostListener("blur", ["$event.target.value"])
    onBlur(value: number) {
        console.log("MyDirective: Blur caught.");
    }

    @HostListener("load", ["$event.target.value"])
    onLoad() {
        console.log("MyDirective: Load caught.");
    }
}

当我运行所有东西时,它会很好地加载。没有丢失模块,缺少组件等问题。控制台中没有错误。正如我之前提到的,即使使用调试器进入代码,也会验证指令是否已实例化。但我也没有控制台输出。我至少会期待onload事件。禁用的input控件是否会触发那些什么?

1 个答案:

答案 0 :(得分:1)

onLoad无效,因为它是一个窗口事件,而不是表单事件

以下是可以为表单元素处理的事件列表

onblur  
onchange
oncontextmenu   
onfocus 
oninput 
oninvalid   
onreset 
onsearch
onselect
onsubmit

您已从此documentation引用它 根据评论更新

正如您所期望的MDN链接支持上述答案 here it is

enter image description here

资源事件是指互联网中的资源,例如网址。