2

Ich versuche, ngControl für benutzerdefinierte Komponente zu verwenden. Ich habe die Komponente erstellt und ControlValueAccessor auf der Komponente implementiert.NgControl für benutzerdefinierte Direktive in Angular2

Dann im Konstruktor wird NgControl wie unten injiziert:

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

Aber auf diese Weise, wenn ich die ngControl auf dem Selektor verwenden, werden die Formularklassen (ng-pristine , ng-touched, ng-invalid) nicht aktualisiert wird, noch kann ich den Wert des Formularelements.

Kann mir jemand helfen, wo ich es falsch mache.


Zusätzlich zu der Beschreibung des Problems ich Thierry Templier Lösung versucht, mit den begrenzten Kenntnissen in angular2 aber ich habe in einen kreisförmigen Referenzfehler.

mehr in der Ausgabe Detaillierung habe ich eine Komponente MyComponent, die ich verwende in einem ContainerComponent, wenn i ngControl in Container-Komponente verwenden, mit den beschriebenen Änderungen von Thierry Templier, gemacht MyComponent ich den Kreisreferenzfehler erhalten, etwas wie: (MyComponent -> ngControl ..... -> token** -> MyComponent).

Irgendwelche Vorschläge dazu.

+0

Bitte senden Sie uns eine Demo Ihrer Komponente. – dfsq

Antwort

1

In der Tat müssen Sie Ihren Accessor Wert in die Anbieter Ihrer Komponente registrieren. Beachten Sie, dass es selbst sein kann: Die Komponente ist der Wert Accessor und muss selbst in ihren Providern registriert werden). In der Tat ist dieser Fall forwardRef hilfreich.

So etwas:

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

Ich habe versucht, es zu verwenden, mit dem begrenzten Wissen in angular2. Ich komme in einen kreisförmigen Referenzfehler. Irgendwelche Vorschläge dazu. – ankitkamboj

Verwandte Themen