Angularjs - установленное значение просмотра не обновляет отображение

У меня есть директива ввода, которая должна позволять пользователям отменять.

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

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

Пример JSBIN


person haki    schedule 05.04.2014    source источник
comment
Пожалуйста, проверьте ответ Ивана Кошелева, кажется, это правильный ответ. Если да, отметьте это как ответ.   -  person Iman Mahmoudinasab    schedule 13.03.2018


Ответы (2)


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

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

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

scope.$apply(function() {
  scope.ngModel = scope.last_saved_value;
});
person dave    schedule 05.04.2014
comment
Привет, @dave. Думаю, ключ здесь - двусторонняя привязка? я имею в виду, я, вероятно, (хотя это действительно бессмысленно) обновлял локальную копию ng-модели? - person haki; 05.04.2014

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

person Ivan Koshelev    schedule 07.04.2014
comment
Я думал, что метод $render должен быть реализован разработчиком, но полагаю, что это применимо только к настраиваемым элементам управления. Вызов его для входов (type="checkbox" и type="text" в моем случае) работает отлично. Спасибо. - person Carlos Garcia; 13.04.2016