2014-04-05 2 views
6

Ho ricevuto una direttiva di input che dovrebbe consentire agli utenti di annullare.Angularjs - imposta il valore di visualizzazione non aggiorna il display

Inserire salva il valore con una qualche funzione, Esc Annulla modifiche dall'ultima risparmiare.

Per la Esc evento pressione di un tasto sto usando ngmodel.$setViewValue(scope.last_saved_value) ma l'ingresso non sta aggiornando. So dallo docs che questa funzione non si attiva $digest quindi l'ho inserita in un $apply ma non funziona ancora.

JSBIN example

risposta

2

Io di solito entrambi includono e richiedono la ngModel:

app.directive('cancelableInput', function($timeout) { 
    return { 
    restrict : "A", 
    require : 'ngModel', 
    scope: { 
     ngModel: '=?' 
    }, 

Poi, quando si desidera cambiare il valore del modello e lo hanno aggiornato, si può solo fare:

scope.$apply(function() { 
    scope.ngModel = scope.last_saved_value; 
}); 
+0

Hey @dave. Immagino che la chiave qui sia l'associazione bidirezionale? Voglio dire, probabilmente ero (anche se non ha senso) l'aggiornamento di una copia locale del modello NG? – haki

+0

ha funzionato per me, grazie @dave – melloc

34

Prova a chiamare ngmodel.$render(); dopo aver eseguito $setViewValue, dovrebbe essere d'aiuto.

+1

Questo mi ha aiutato a risolvere un problema. – MBielski

+3

questa dovrebbe essere la risposta accettata – scniro

+0

Ho pensato che il metodo '$ render' dovrebbe essere implementato dallo sviluppatore, ma suppongo che si applichi solo ai controlli personalizzati. Chiamarlo per gli input ('type =" checkbox "' e 'type =" text "' nel mio caso) funziona perfettamente. Grazie. –