フォームの入力に使用する属性ディレクティブmyOptional
を作成しました。その目的は、特定のフィールドがオプションであることを示すことです。これは入力にクラスを追加することによって行われ、オプションテキストはCSS疑似要素::after
を使って表示されます。@HostListener( 'change')が機能しない - Angular2 RC1
「オプション」ラベルは、入力の値が空で、フォーカスが他の場所にある場合にのみ表示されることを意味します。
ので、ディレクティブが初期化されるとき、私たちはフォーカスオン
ngOnInit() {
this.addOptionalClass();
}
入力にクラスを追加し、我々は場合は、オプションのラベルに、したがって、ぼかしオン
@HostListener('focus') onfocus() {
this.removeOptionalClass();
}
をクラスを削除し、入力値はまだ空ですが、ラベルを表示しました
@HostListener('blur') onblur() {
if (this.isInputElement()) {
let inputValue = (<HTMLInputElement>this.el).value;
if (inputValue === '') this.addOptionalClass();
}
}
これまでのところ、とても良いです。この問題は、フォームのコントロールを更新して入力値を設定した場合に発生します。その場合、入力値が更新され、空でない場合、クラスを削除したいと思います。
イベントリスナーをonchange
イベントにアタッチできると仮定しましたが、以下のコードはまったくトリガーされません。私もdocument.getElementBydId
を使って入力の値を修正しようとしましたが、成功しませんでした。
@HostListener('change') onchange() {
console.log((<HTMLInputElement>this.el).value);
}
私は自分自身を明確にしました。どんな助けでも大歓迎です。
迅速な対応をありがとう。しかし、これは動作していません。入力の値を入力してもinputChangedメソッドは起動しません – Gonzalo
イベントを発生させたくありません。または、おそらく私はあなたの実際の問題を取得しません。 – mxii
入力の値は、フォームコントロールを更新することによってプログラムで設定されています。 '( this.form.controls [c])。updateValue(obj [c])'。これが起こると、オプションのクラスを削除したいと思います。しかし、これはあなたが投稿したinputChangedメソッドや上に投稿したonchangeをトリガーしていません。 –
Gonzalo