Ich habe meine Form so:
<form name="myForm">
<input name="myText" type="text" ng-model="mytext" required />
<button disabled="{{ myForm.$invalid }}">Save</button>
</form>
Wie Sie vielleicht sehen, ist die Schaltfläche deaktiviert, wenn die Eingabe leer ist, sie wird jedoch nicht wieder aktiviert, wenn sie Text enthält. Wie kann ich es zum Laufen bringen?
Antworten:
Sie müssen den Namen Ihres Formulars sowie ng-disabled verwenden: Hier ist eine Demo zu Plunker
quelle
<div ng-form="myForm"> ... stuff here .. </div>
. Wenn Sie jedoch einen Wert von Eingaben per Knopfdruck übermitteln, empfehle ich dringend , ein<form/>
Tag zu verwenden, wenn ein Benutzer aus keinem anderen Grund [ENTER] drücken und das Formular senden kann. Aber es ist wahrscheinlich auch eine bessere Praxis, wenn es um Zugänglichkeit geht.Zu dieser Antwort hinzufügen. Ich habe gerade herausgefunden, dass es auch zusammenbricht, wenn Sie einen Bindestrich in Ihrem Formularnamen verwenden (Winkel 1.3):
Das wird also nicht funktionieren:
quelle
myForm.$invalid
nach immer noch funktionieren. In Ihrem Fall würde ich denken,my_formset_name0.$invalid
dass es funktionieren sollte.Die ausgewählte Antwort ist korrekt, aber jemand wie ich hat möglicherweise Probleme mit der asynchronen Validierung beim Senden einer Anfrage an den Server. Die Schaltfläche wird während der Verarbeitung einer bestimmten Anforderung nicht deaktiviert, sodass die Schaltfläche blinkt, was für die Benutzer ziemlich seltsam aussieht.
Um dies aufzuheben, müssen Sie nur den Status $ ausstehend des Formulars verarbeiten:
quelle
!myForm.$valid
, um auch asynchrone ausstehende Probleme zu behandeln. itnext.io/valid-and-invalid-in-angular-forms-61cfa3f2a0cdWenn Sie reaktive Formulare verwenden, können Sie Folgendes verwenden:
quelle
(click)
und[disabled]
sind nicht gültig AngularJS Code, noch sind Reactive Bildet einen Teil des AngularJS Rahmen. "Angular ist der Name für den Angular von heute und morgen. AngularJS ist der Name für alle v1.x-Versionen von Angular" angular.io/guide/ajs-quick-referenceWir können eine einfache Anweisung erstellen und die Schaltfläche deaktivieren, bis alle Pflichtfelder ausgefüllt sind.
Für weitere Informationen klicken Sie hier
quelle
ng-disabled
in Winkel 1.x und[disabled]
in Winkel 2 | 4.x gibt, die viel besser getestet werden? Zweitens, warum sollte eine Direktive, die auf ein Formular beschränkt ist, um eine verschachtelte Schaltfläche zu deaktivieren, sehr spezifisch sein? Eine schlecht durchdachte Lösung IMO.Wenn Sie etwas strenger sein wollen
quelle