Скажем, у меня есть текстовое поле, проверенное ngPattern, которое в настоящее время действительно. Теперь я меняю регулярное выражение на то, которое не соответствует значению текстового поля. Angular не сразу понимает, что текстовое поле теперь недействительно - пользователь должен внести изменение (например, ввести другую букву), чтобы вызвать проверку нового регулярного выражения.
Обходной путь состоит в том, чтобы заставить конвейер синтаксического анализа запускаться, устанавливая $viewValue на себя всякий раз, когда изменяется регулярное выражение, например:
Просмотреть
<div ng-form="form">
<input type="text" name="val" ng-model="myValue" ng-pattern="myRegex" />
</div>
Контроллер
// set a new regex for the ng-pattern directive and force re-validation
$scope.myRegex = new RegExp('^[a-z]$');
$scope.form.val.$setViewValue($scope.form.val.$viewValue); // yuck
Тем не менее, это похоже на большой взлом, и я надеюсь, что есть более удобный способ сделать это, не прибегая к пользовательской директиве.
Скрипт: http://jsfiddle.net/5jm2V/2/