EDIT:問題が見つかりました。あなたはそれが何であったかを知っていますか?クロムキャッシングの問題。 Chromeは何かをキャッシュし、デバッガが開いて明示的にページをリフレッシュしている間にキャッシュをオフにするまで、私はどこにも行きませんでした。私がリフレッシュしたら、私はイベントを捕らえ始めました。Angular2:ディレクティブがロードされますが、何もしません。
オリジナルポスト:onload
、onblur
、またはonfocus
: 私は3つのイベントのいずれかの制御に作用するはずのカスタム角度ディレクティブを持っています。 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
コントロールはそれらを起動しませんか?それは、ウィンドウのイベントではなくフォームイベント
以下は、フォーム要素のために処理できるイベントのリストであるため、
この指令はどこで提供されていますか、どこで使用しますか(コンポーネント間の関係)? – echonax
パラメータを持つメソッドではなく、@HostBinding( 'value')を使用する必要があります。 – Fals
@ファルス:どのように役立つか分かりません。これは単純化されたバージョンです - 本当に、それは私ができないイベントをキャッチすることができるかどうかを確認するためのテストに過ぎません。私は 'load'を' value'と 'change'に変更しようとしましたが、無効でないInputコントロールでこれを試しました。絶対に何も起こりません - 「ぼやけ」ではなく「フォーカス」ではなく、「価値/変更/ロード」ではありません。何もない。私は 'onInit'を処理して、コントロールのIDを出力してzipを取得しただけです。 "id = undefined" –