2017-02-07 9 views
1

現在、私は<input>要素に大文字、通貨などの書式を設定する指示を出しています。ユーザが入力する。これはすべてControlValueAccessorを実装することで効果的ですが、writeValueメソッドの実行後にコントロールの有効性状態が更新されません。NgModelから角2+の指示にアクセスするには

検証する入力にngModelでFormControlを強制する方法はありますか、または同一の入力上に配置される指令にNgModel/FormControlインスタンスを注入する方法はありますか?私はそれを注入しようとするたびに、私は循環依存エラーが発生します。私はNgModelインスタンスのコントロールプロパティでupdateValueAndValidity()メソッドを使用して状態を更新しようとしていますが、これも間違っている可能性があります。

これにアプローチするより良い方法がある場合は、私も同様の提案をすることができます。基本的にはあなたが特定の何のためのコードのスニペットを見たいなら、私に教えてください... $formatters$parsersを使用してngModelインスタンスを必要な角度1.xから指令を翻訳し

をしようとしています。

+0

私はこれがあなたが必要とする(重複する可能性のある質問)をすると思います:http://stackoverflow.com/questions/35826325/how-to-convert-input-value-to-uppercase-in-angular-2-value -passing-to-ngcontrol – JayDM

+0

@JayDM実際、@Thierry Templierの回答の@cghislaiによるコメントは、検証のためにonTouchedを呼び出す必要があることを述べていますので、試してみました。 'onChange'を呼び出す前に' onTouched'の呼び出しを追加しました。そして検証状態は正常に更新されています。 – DRiFTy

答えて

0

を経由してそのメソッドにアクセスし、私は中にonTouched()法(registerOnTouched()メソッドを介して設定されているメソッド)を呼び出すことにより、更新するために、検証状態を取得することができました方法はwriteValue()です。

私のディレクティブはwriteValue()ElementRef.nativeElement.valueプロパティを更新し、モデルに伝搬する値を取得するだけでなく、検証の状態を更新するためにonChange()onTouched()を呼び出します。

1

updateValueAndValidityのようなサウンドが好きです。
Angular 2 AbstractControl class(FormControlのスーパーです)は、コントロールの有効状態のチェックを強制するこのメソッドを備えています。

角度が気に入らないように、特定のformControlにアクセスしている可能性があります。参考までに、私はformGroup型の包括的な 'form'と、formGroup型の 'controlGroup'と、formControl型の特定の 'control'を持っています。私はControlValueAccessorを使用し、これと同じ問題を持つディレクティブを実装する人にとってform.controls['controlGroup'].controls.['control'].<method>

+0

それは私も同様に考えていた。 'AbstractControl'や' NgControl'を拡張してこの機能を動作させることができませんでした。私は 'ControlValueAccessor'を実装し、何らかの形で' NgControl'やベース 'FormControl'への参照を取得しようとしましたが、失敗しました。私の場合、 '(入力)'ホストイベントバインディングが実行されたときに 'onTouched'を呼び出すだけで、検証ステートの更新が開始されました。 Angularは、そのタッチイベントが実行されたときにのみ、そのコードを実行する必要があります。 – DRiFTy

+0

私は参照してください。申し訳ありませんが、私はあなたの質問のその部分を光らせました。あなたのシナリオは私が持っているシナリオとは少し異なりますが、同じように動作することが期待されます。私たちは、別のformControl2が依存するformControl1の値の変更を購読しています。私がformControl1で値の変化を見ると、私はformControl2でいくつかのアクションを完了し、次にupdateValueAndValidityでその有効性状態のチェックを強制しなければなりません。 –

関連する問題