2017-03-31 15 views
0

EDIT:問題が見つかりました。あなたはそれが何であったかを知っていますか?クロムキャッシングの問題。 Chromeは何かをキャッシュし、デバッガが開いて明示的にページをリフレッシュしている間にキャッシュをオフにするまで、私はどこにも行きませんでした。私がリフレッシュしたら、私はイベントを捕らえ始めました。Angular2:ディレクティブがロードされますが、何もしません。

オリジナルポスト:onloadonblur、またはonfocus 私は3つのイベントのいずれかの制御に作用するはずのカスタム角度ディレクティブを持っています。 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コントロールはそれらを起動しませんか?それは、ウィンドウのイベントではなくフォームイベント

以下は、フォーム要素のために処理できるイベントのリストであるため、

+0

この指令はどこで提供されていますか、どこで使用しますか(コンポーネント間の関係)? – echonax

+0

パラメータを持つメソッドではなく、@HostBinding( 'value')を使用する必要があります。 – Fals

+0

@ファルス:どのように役立つか分かりません。これは単純化されたバージョンです - 本当に、それは私ができないイベントをキャッチすることができるかどうかを確認するためのテストに過ぎません。私は 'load'を' value'と 'change'に変更しようとしましたが、無効でないInputコントロールでこれを試しました。絶対に何も起こりません - 「ぼやけ」ではなく「フォーカス」ではなく、「価値/変更/ロード」ではありません。何もない。私は 'onInit'を処理して、コントロールのIDを出力してzipを取得しただけです。 "id = undefined" –

答えて

1

onLoadは動作しません

onblur 
onchange 
oncontextmenu 
onfocus 
oninput 
oninvalid 
onreset 
onsearch 
onselect 
onsubmit 

あなたはそれを参照していますからこのdocumentation コメントに基づいて更新

上記の回答をサポートするMDNリンクが期待された通りhere it is

enter image description here

リソースのイベントは、Web URLとしてインターネット内のリソースを参照します。

+0

一般に、w3schoolsは学習するのに最適な場所ではありません。正確には正確に説明されていないものがたくさんありました。 MDNはリンクするのにはるかに良い場所です。 – Bakudan

+0

更新された答えを確認してください – Aravind

+0

onLoadが機能せず、同等のフォームイベントが表示されない場合は、コントロールが表示されたときにそのイベントを使用できるイベントがありますか?私の短縮バージョンはさておき、ロード時に入力ボックスに値を書式化しようとしていますが、実際にロードするときは知っておく必要があります。または、DirectiveでOnInitを使用し、elementRef.target.valueをフォーマット済みの値に設定することはできますか? –

関連する問題