Se ho dichiarato un modulo con una funzione legata alla direttiva ng-submit
, come posso evitare che tale funzione venga eseguita quando si fa clic sul pulsante di invio ma il modulo non è valido?Impedire che ng-submit venga richiamato per un modulo non valido
Ho trovato due soluzioni a questo che ha grandi svantaggi e quindi non voglio usarli:
Passo il modulo per il controller:
//HTML <form ng-submit="myFunc($form, model)"> //JavaScript $scope.myFunc = function($form, model) { if ($form.$valid) { //do stuff } }
questo è male poiché lega la funzione a essere chiamata da una forma.
Rende disattivato il pulsante di invio quando il modulo non è valido.
<input type="submit" ng-disabled="!form.$valid"/>
Questo è male perché gli elementi disabilitati sono difficili da utilizzare. I tooltip non mostrano quando il pulsante è al passaggio del mouse o cliccato, quindi è difficile dare un feedback a un utente che sta tentando di fare clic sul pulsante disabilitato.
C'è un'altra soluzione a questo problema?
Questo mi sembra una questione oggettivamente rispondere, che in effetti è stato risposto. Non capisco la logica per averlo chiuso come "principalmente basato sull'opinione pubblica". Il PO è chiaramente supponente, e alcuni potrebbero obiettare che il suo "problema" non è veramente uno, ma non sta comunque * cercando * opinioni dagli altri, ma chiedendo una semplice domanda fattuale. Sto votando per riaprire. –
I miei due centesimi: è fondamentalmente in disaccordo con la filosofia di design di AngularJS di opporsi alle funzioni di controller che sono legate alla gestione di particolari eventi DOM. A volte vorrete avere funzioni di controllo che eseguano un '$ event' e ne facciano qualcosa (come fermare la propagazione o controllare un target di clic o qualcosa del genere) e in quei casi il pattern puramente-as-handler è inevitabile. Accettalo e se hai bisogno di riutilizzare la logica, estraila in una diversa funzione che il gestore chiama. –