2014-04-05 1 views
6

У меня есть директива ввода, которая должна позволять пользователям отменять.Angularjs - set view value не обновляет отображение

Введите сохраняет значение, используя какую-либо функцию, Esc Отмена правки из последнего сохранения.

Для Esc нажатия клавиши события я использую ngmodel.$setViewValue(scope.last_saved_value) но входа не обновляется. Я знаю из docs, что эта функция не вызывает $digest, поэтому я положил ее в $apply, но он все еще не работает.

JSBIN example

ответ

2

я обычно и включают в себя и требуют ngModel:

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

Затем, когда вы хотите изменить значение модели и его обновления, вы можете просто сделать:

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

Hey @dave. Думаю, ключ здесь - это двухсторонняя привязка? я имею в виду, я, вероятно, (хотя это действительно не имеет смысла) обновляет локальную копию ng-модели? – haki

+0

работал для меня, спасибо @dave – melloc

34

Попробуйте позвонить ngmodel.$render(); после того, как вы сделаете $setViewValue, это должно помочь.

+1

Это помогло мне решить проблему. – MBielski

+3

Это должен быть принятый ответ – scniro

+0

Я думал, что метод '$ render' должен быть реализован разработчиком, но, я думаю, это применимо только к пользовательским элементам управления. Вызов для ввода («type =» checkbox «' и 'type =" text "в моем случае) работает отлично. Благодарю. –