2013-12-03 16 views
9

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:

  1. 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.

  2. 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?

+0

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. –

+0

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. –

risposta

30

E 'possibile fare questo:

<form name="myForm" ng-submit="myForm.$valid && myFunc()"> 

Ma non c'è molto male nel controllo della validità entro ngSubmit sé.

+0

Funziona con angular 2 se si utilizza '(ngSubmit) =" myForm.valid && myFunc() "' – TetraDev

0
ng-disabled="regForm.$invalid || regForm.$pending" 

speranza che questo sarà utile per voi

Problemi correlati