2

カスタムコンポーネントでngControlを使用しようとしています。私はコンポーネントを作成し、コンポーネントにControlValueAccessorを実装しました。Angular2のカスタムディレクティブのNgControl

次にコンストラクタで、NgControlは、以下のように注入された:

constructor(@Self() private ngControl: NgControl){ 
    this.ngControl.valueAccessor = this; 
} 

しかし、私はセレクタをngControlを使用する場合は、この方法は、フォームクラス(ng-pristine , ng-touched, ng-invalid)が更新されない、また私が値を確認することができますフォーム要素の

誰かが間違っていることを助けることができます。


Iはangular2に限られた知識を用いて、Thierry Templier溶液に試みた問題 の説明に追加するが、私は循環参照エラーに入ります。私はMyComponentに行われたティエリーTEMPLIERで説明する変更、で、コンテナコンポーネントでngControlを使用する場合

問題でより多くのディテール、私は、私は循環参照エラーを取得し、私はContainerComponentに使用していますコンポーネントMyComponentを持っています次のようなものです:(MyComponent -> ngControl ..... -> token** -> MyComponent)。

その周辺のご提案です。

+0

あなたのコンポーネントのデモを投稿してください。 – dfsq

答えて

1

実際、値アクセサーをコンポーネントのプロバイダに登録する必要があります。コンポーネント自体が可能性があることに注意してください。コンポーネントは値アクセッサであり、プロバイダに登録する必要があります。実際にはこの場合forwardRefが役に立ちます。そのような

何か:

const CUSTOM_VALUE_ACCESSOR = new Provider(
    NG_VALUE_ACCESSOR, {useExisting: forwardRef(() => LabelsValueAccessor), multi: true}); 

@Component({ 
    (...) 
    providers: [CUSTOM_VALUE_ACCESSOR] 
}) 
export class LabelsValueAccessor implements ControlValueAccessor { 
    (...) 
} 
+0

私はそれを使ってみましたが、angular2の知識は限られていました。私は循環参照エラーに陥る。その周りの任意の提案。 – ankitkamboj

関連する問題