Gibt es eine Möglichkeit, eine Bedingung in einen ng-Klick einzufügen? Hier möchte ich, dass das Formular nicht gesendet wird, wenn Formularfehler vorliegen, aber dann habe ich eine Analyse-Ausnahme erhalten.
<input ng-click="{{if(profileForm.$valid) updateMyProfile()}}" name="submit" id="submit" value="Save" class="submit" type="submit">
Ich habe versucht, ng-disabled zu verwenden, aber dann funktioniert mein Validierungs-Plugin nicht, da das Formular überhaupt nicht gesendet wird und daher nicht ausgelöst wird.
javascript
angularjs
Frühling
quelle
quelle
Antworten:
Fügen Sie keinen Bedingungsausdruck in die Vorlage ein.
Mach es am Controller.
Vorlage:
<input ng-click="check(profileForm.$valid)" name="submit" id="submit" value="Save" class="submit" type="submit">
Regler:
$scope.check = function(value) { if (value) { updateMyProfile(); } }
quelle
<a ng-click="pluginsChanged ? restartServer($event) : null" href="https://stackoverflow.com/">Back</a>
Sie sich nur den HTML-Code ansehen, ist es sehr offensichtlich, dass beim Klicken auf diesen Link, wenn sich die Plugins geändert haben, der Server neu gestartet wird, da sonst nichts Besonderes passiert. Wenn ich das in den Controller gestellt hätte, hätte ich eine separate Funktion benötigt, weil ichrestartServer
anderswo verwende, und es wäre im HTML nicht offensichtlich, was passiert.Dies ist möglicherweise irrelevant und nutzlos, aber da es sich um Javascript handelt, müssen Sie das Ternär nicht wie oben in der ng-click-Anweisung vorgeschlagen verwenden. Sie sollten auch in der Lage sein, die Syntax für die verzögerte Auswertung ("oder die") zu verwenden. Also für Ihr Beispiel oben:
<input ng-click="{{if(profileForm.$valid) updateMyProfile()}}" name="submit" id="submit" value="Save" class="submit" type="submit">
würde werden:
<input ng-click="profileForm.$valid && updateMyProfile()" name="submit" id="submit" value="Save" class="submit" type="submit">
In diesem Fall passiert nichts, wenn das Profil nicht gültig ist. Andernfalls wird updateMyProfile () aufgerufen. Wie in dem Link, den @falinsky oben bereitstellt.
quelle
Hier ist ein Hack, den ich entdeckt habe und der für Sie funktionieren könnte, obwohl er nicht schön ist und es mir persönlich peinlich wäre, eine solche Codezeile zu verwenden:
ng-click="profileForm.$valid ? updateMyProfile() : alert('failed')"
Jetzt müssen Sie nachdenken, aber ich möchte nicht, dass es alarmiert ("fehlgeschlagen"), wenn meine
profileForm
nicht gültig ist. Nun, das ist der hässliche Teil. Für mich wird, egal was ich in die else-Klausel dieser ternären Anweisung einfüge, nie ausgeführt.Wenn es jedoch entfernt wird, wird ein Fehler ausgegeben. Sie können es also einfach mit einem sinnlosen Alarm füllen.
Ich habe dir gesagt, dass es hässlich ist ... aber ich bekomme nicht einmal Fehler, wenn ich so etwas mache.
Der richtige Weg, dies zu tun, ist, wie Chen-Tsu erwähnte, aber für jeden seinen eigenen.
quelle
ciCtrl.iconSelections.style === 2 ? ciCtrl.iconSelections.style = 1 : blah
Wenn Sie dies auf diese Weise tun müssen, haben Sie folgende Möglichkeiten:
Deaktivieren der Schaltfläche bei deaktiviertem ng
Mit Abstand die einfachste Lösung.
<input ng-disabled="!profileForm.$valid" ng-click="updateMyProfile()" ... >
Verstecke die Schaltfläche (und zeige etwas anderes) mit ng-if
Könnte in Ordnung sein, wenn Sie ein komplexes Markup ein- oder ausblenden.
<div ng-if="profileForm.$valid"> <input ng-click="updateMyProfile()" ... > </div> <div ng-if="!profileForm.$valid"> Sorry! We need all form fields properly filled out to continue. </div>
(Denken Sie daran, es gibt keine
ng-else
...)Eine Mischung aus beidem
Kommunizieren Sie mit dem Benutzer, wo sich die Schaltfläche befindet (er sucht nicht mehr danach), erklären Sie jedoch, warum nicht darauf geklickt werden kann.
<input ng-disabled="!profileForm.$valid" ng-click="updateMyProfile()" ... > <div ng-if="!profileForm.$valid"> Sorry! We need all form fields properly filled out to continue. </div>
quelle
Wir können ng-click-Ereignisse bedingt hinzufügen, ohne die deaktivierte Klasse zu verwenden.
HTML:
<input ng-click="profileForm.$valid && updateMyProfile()" name="submit" id="submit" value="Save" class="submit" type="submit">
quelle
Unter http://php.quicoto.com/inline-ifelse-statement-ngclick-angularjs/ machen Sie das so, wenn Sie wirklich müssen:
ng-click="variable = (condition=='X' ? 'Y' : 'X')"
quelle
Sie können Bedingungen in Tags einfügen. Versuchen:
ng-class="{true:'active',false:'disable'}[list_status=='show']"
quelle
Schreiben Sie als
<input type="submit" ng-click="profileForm.$valid==true?updateMyProfile():''" name="submit" value="Save" class="submit" id="submit">
quelle