2014-04-05 11 views
6

Mam dyrektywę wejściową, która powinna umożliwić użytkownikom cofanie.Angularjs - ustaw wartość widoku nie aktualizuje wyświetlania

Wprowadź zapisuje wartość za jakąś funkcję, Esc Anuluj zmiany od ostatniego zapisu.

Dla Esc imprezy keypress używam ngmodel.$setViewValue(scope.last_saved_value) ale wejście nie aktualizuje. Wiem od docs, że ta funkcja nie wyzwala $digest, więc umieszczam ją w $apply, ale nadal nie działa.

JSBIN example

Odpowiedz

2

Zwykle oba obejmują i wymagają ngModel:

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

Wtedy, gdy chcemy zmienić wartość modelu i go zaktualizować, można po prostu zrobić:

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

Hej @dave. Sądzę, że kluczem jest dwukierunkowa więź? Chodzi mi o to, że prawdopodobnie (choć to bez sensu) aktualizowałem lokalną kopię modelu ng? – haki

+0

pracował dla mnie, dzięki @dave – melloc

34

Spróbuj zadzwonić pod numer ngmodel.$render(); po wykonaniu $setViewValue, powinno to pomóc.

+1

Pomogło mi to rozwiązać problem. – MBielski

+3

to powinna być akceptowana odpowiedź. – scniro

+0

Myślałem, że programista powinien zaimplementować metodę '$ render', ale myślę, że dotyczy to tylko niestandardowych elementów sterujących. Wywołanie go dla wejść ("type =" checkbox "' i 'type =" text "' w moim przypadku) działa idealnie. Dzięki. –

Powiązane problemy