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';
}

Ответы на вопрос(1)

Ваш ответ на вопрос