AngularJS - В директиве, которая изменяет значение модели, почему я должен вызывать $ render?
Я сделал директиву, предназначенную для присоединения к элементу, используя директиву ngModel. Если модельЗначение s совпадает с чем-то, что значение затем должно установить на предыдущее значение. В моем примере яищуFoo»и установить его обратно к предыдущему, если этос чемнабрал в.
Мои юнит-тесты прошли нормально, потому что онитолько смотреть на значение модели. Однако на практике DOM нет обновляется, когда "положить обратно триггеры. Наше лучшее предположение заключается в том, что установка old == new предотвращает грязную проверку. Я прошел через метод $ setViewValue, и он, кажется, делает то, что должен. Однако это победилоt обновлять DOM (и то, что вы видите в браузере), пока я не вызову ngModel. $ render () явно после установки нового значения. Это отлично работает, но я просто хочу посмотреть, есть лиЭто более подходящий способ сделать это.
Код ниже,Вот'скрипка с тем же.
angular.module('myDirective', [])
.directive('myDirective', function () {
return {
restrict: 'A',
terminal: true,
require: "?ngModel",
link: function (scope, element, attrs, ngModel) {
scope.$watch(attrs.ngModel, function (newValue, oldValue) {
//ngModel.$setViewValue(newValue + "!");
if (newValue == "foo")
{
ngModel.$setViewValue(oldValue);
/*
I Need this render call in order to update the input box; is that OK?
My best guess is that setting new = old prevents a dirty check which would trigger $render()
*/
ngModel.$render();
}
});
}
};
});
function x($scope) {
$scope.test = 'value here';
}