Kein Wertzugriff für die Formularsteuerung mit dem Namen: 'Empfänger'

68

Ich habe diesen Fehler nach dem Upgrade auf Angular 2 Rc.5 erhalten. Dies ist meine Komponentenvorlage:

<md-input
    [(ngModel)]="recipient"
    name="recipient"
    placeholder="Name"
    class="col-sm-4"
    (blur)="addRecipient(recipient)">
</md-input>

Meine app.module.ts importiert die FormsModule

Ich habe auch versucht, private recipient;in meiner Komponente zu deklarieren .

Vermisse ich etwas Warum erhalte ich diesen Fehler?

No value accessor for form control with name: 'recipient'
TheUnreal
quelle
3
Dup von stackoverflow.com/questions/38958347/… ?
Günter Zöchbauer

Antworten:

135

Sie sollten das ngDefaultControl-Attribut wie folgt zu Ihrer Eingabe hinzufügen:

<md-input
    [(ngModel)]="recipient"
    name="recipient"
    placeholder="Name"
    class="col-sm-4"
    (blur)="addRecipient(recipient)"
    ngDefaultControl>
</md-input>

Entnommen aus den Kommentaren in diesem Beitrag:

Angular2 RCC.5 Benutzerdefinierte Eingabe, Kein Wert Accessor für die Formularsteuerung mit nicht angegebenem Namen

Hinweis: Für spätere Versionen von @ angle / material:

Heutzutage sollten Sie stattdessen schreiben:

<md-input-container>
    <input
        mdInput
        [(ngModel)]="recipient"
        name="recipient"
        placeholder="Name"
        (blur)="addRecipient(recipient)">
</md-input-container>

Siehe https://material.angular.io/components/input/overview

Peter Salomonsen
quelle
3
Es funktioniert für mich, aber kann mir jemand erklären, warum wir "ngDefaultControl" hinzufügen müssen?
Jpmottin
Dies lag daran, dass md-input kein bekanntes Tag für ngModel war. Für neuere Versionen von @ angle / material sollten Sie jedoch das input-Tag mit mdInput als Attribut verwenden, das stattdessen in ein md-input-container-Element eingeschlossen ist. Siehe material.angular.io/components/input/overview
Peter Salomonsen
14

Stellen Sie sicher, dass Sie auch MaterialModule importieren, da Sie md-input verwenden, das nicht zu FormsModule gehört

Ophir Bushinsky
quelle
Welches npm-Paket sollte installiert werden, um das MaterialModule zu erhalten?
Peter Salomonsen
Ich denke, es ist @ angle2-material / core
Ophir Bushinsky
Kein MaterialModul in @ angle2-material / core
Peter Salomonsen
ok, ich habe es überprüft und Sie müssen Folgendes tun: npm install @ angle2-material / core --save und npm install @ angle2-material / input --save, dann MdInputModule aus @ angle2-material / input importieren
Ophir Bushinsky
Ich habe das MdInputModule importiert, aber wenn ich [(ngModel)] zu meiner md-Eingabe hinzufüge, erhalte ich die gleiche Fehlermeldung wie in der Frage: "Kein Wertzugriff für die Formularsteuerung". Haben Sie mit ngModel getestet? (worauf sich die Frage bezog).
Peter Salomonsen