2013-04-29 6 views
5

Come afferma il soggetto, come faccio a innescare le azioni che si terrà all'interno di unacome attivare parser angolari senza inputing nulla nel campo

modelController.$parsers(...) 

senza l'input dell'utente ... l'unico modo che posso pensare li sta avvolgendo all'interno di una funzione e chiamarlo, ma c'è un modo migliore per innescare

**//pseudo 
$(modelController).trigger('just got dirty');** 

la ragione avrei bisogno di questo è quello di attivare il campo di input per validare sé sulla presentazione di pagina.

risposta

9

ho trovato un modo per risolvere questo - basta chiamare i parser con il valore del modello:

angular.forEach(ngModel.$parsers, function (parser) { 
    parser(ngModel.$viewValue); 
}); 

È così semplice e sembra essere la soluzione più corretta.

+0

Questo ha funzionato perfettamente per me (versione 1.2.29) - grazie! Perché questa semplice risposta non è più diffusa? Per un leggero miglioramento della risposta, usa un ciclo 'for' nativo invece di' angular.forEach', controlla la proprietà 'name' del parser e riattiva solo quello che vuoi invece di tutto (se applicabile), e' break' il ciclo una volta che hai attivato ciò che vuoi. Queste sono solo micro-ottimizzazioni, comunque. –

1

Questa domanda è attuale anche per me ... perché io sono risolvere la questione con:

var triggerParsers = function() { 
    var val = ngModel.$viewValue; 
    ngModel.$setViewValue(null); 
    ngModel.$setViewValue(val); 
}; 
+0

credo che la risposta sia do element.trigger ('change'); – user2167582

+0

Ho provato a usare element.trigger, ma questo trucco non funziona, questo perché l'evento è stato attivato, ma il valore non è stato modificato, quindi l'angolare non avvia i parser. –

Problemi correlati