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

Javascript Angular2:指令加载,但不执行任何操作,javascript,html,angular,typescript,Javascript,Html,Angular,Typescript,编辑:我发现了问题。你知道结果是什么吗?chrome缓存问题。Chrome缓存了一些东西,直到我在调试器打开并显式刷新页面时关闭缓存,我才一事无成。一旦我恢复精神,我就开始捕捉事件 原创帖子: 我有一个自定义的角度指令,它应该在三个事件中的任意一个事件上作用于控件:onload、onblur或onfocus。它应用于输入控件,该控件可以被禁用,也可以不被禁用。我知道onblur和onfocus对于禁用的控件是无用的,但我认为监听从未出现的事件不会有什么害处。另一方面,启用的控件将触发这些事件,因

编辑:我发现了问题。你知道结果是什么吗?chrome缓存问题。Chrome缓存了一些东西,直到我在调试器打开并显式刷新页面时关闭缓存,我才一事无成。一旦我恢复精神,我就开始捕捉事件

原创帖子: 我有一个自定义的角度指令,它应该在三个事件中的任意一个事件上作用于控件:
onload
onblur
onfocus
。它应用于
输入
控件,该控件可以被禁用,也可以不被禁用。我知道
onblur
onfocus
对于禁用的控件是无用的,但我认为监听从未出现的事件不会有什么害处。另一方面,启用的控件将触发这些事件,因此我需要监听。该指令被设计为相当通用,因此它需要处理禁用和启用的
输入
控件

问题是,它什么也不做。至少,它似乎什么也没做。指令被实例化了——我已经验证了构造函数是否触发,并且我已经验证了
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
控件是否没有触发这些或其他内容?

onLoad
将不起作用,因为它是一个窗口事件,而不是表单事件

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

onblur  
onchange
oncontextmenu   
onfocus 
oninput 
oninvalid   
onreset 
onsearch
onselect
onsubmit
你必须从这本书中引用它 根据评论更新

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


资源事件指的是internet上的资源,如web url。

您在哪里提供此指令以及在哪里使用它(组件之间的关系)?您应该使用@HostBinding('value')而不是带有参数的方法。@Fals:我不确定这会有什么帮助。这是一个简化版本——实际上,这只是一个测试,看看我是否能捕捉到事件,但我不能。我尝试将
load
更改为
value
change
,并在未禁用的输入控件上进行了尝试。绝对不会触发任何内容——不是
模糊
,不是
聚焦
,不是
值/更改/加载
;没有什么我甚至试着处理
onInit
,只输出控件的ID,就得到了zip。“id=未定义”。一般来说,学校不是最好的学习场所。有许多事情没有得到准确/正确的解释。MDN是一个更好的链接位置。因此,如果onLoad不起作用,并且似乎没有等效的表单事件,那么在显示控件时是否有可以触发的事件?撇开我的缩写版本不谈,我试图在输入框加载时格式化一个值,但我需要知道它实际加载的时间,不是吗?或者我可以在指令上使用OnInit并将elementRef.target.value设置为格式化的值吗?您希望什么时候发生?在组件加载过程中,将方法放入组件中并进行处理