【发布时间】:2017-08-26 05:55:50
【问题描述】:
编辑:我发现了问题。你知道结果是什么吗? chrome 缓存问题。 Chrome 缓存了一些东西,直到我在调试器打开并明确刷新我的页面时关闭缓存,我一无所获。刷新后,我开始捕捉事件。
原帖:
我有一个自定义 Angular 指令,它应该作用于三个事件中的任何一个的控件:onload、onblur 或 onfocus。它应用于input 控件,该控件可能会或可能不会被禁用。我知道onblur 和onfocus 在禁用控件上是无用的,但我认为监听从未出现的事件并没有什么坏处。另一方面,启用的控件将触发这些事件,所以我需要监听。该指令被设计为相当通用,因此它需要同时处理禁用和启用的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 控件是否不会触发这些或其他内容?
【问题讨论】:
-
你在哪里提供这个指令以及你在哪里使用它(组件之间的关系)?
-
你应该使用@HostBinding('value') 而不是带参数的方法。
-
@Fals:我不确定这会有什么帮助。这是一个简化版本——实际上,这只是一个测试,看看我是否能捕捉到我无法捕捉到的事件。我尝试将
load更改为value和change,并且在未禁用的输入控件上进行了尝试。绝对没有任何反应——不是blur,不是focus,不是value/change/load;没有。我什至尝试处理onInit并仅输出控件的 ID 并获得 zip。 “id=未定义”。
标签: javascript html angular typescript