現在有効な 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
ただし、これは大きなハックのように思えます。カスタム ディレクティブに頼らずにこれを行うためのより良い方法があることを願っています。