ng-pattern更改,但表示信息有效

时间:2013-07-23 15:05:09

标签: angularjs ng-pattern

因此,当前代码如下所示:

<input ng-pattern="validRegEx()" required>

$scope.validRegEx = function() {
  // blah blah return regex
};

当我更改表单上的输入时,我更改了正则表达式。问题是之前有效的数据(对于新的RegEx不应该有效)仍然有效。如何强制表单再次将正则表达式应用于此字段,而不是仅仅等待用户再次模糊字段?

2 个答案:

答案 0 :(得分:2)

您可以通过观察正则表达式何时更改(或其条件)来执行此操作,并且可以通过重新设置元素的值重新运行验证。

类似这样的事情

angular.module('youappname', [])
    .directive('reApply', function () {
    return {
        require: 'ngModel',
        restrict: 'A',
        link: function (scope, elm, attrs, ctrl) {
            // you should change 'regex' in the following line to match the variable that when altered causes the regex to change..
            scope.$watch('regex', function (value) {
                if (ctrl.$viewValue !== ''){
                    ctrl.$setViewValue( ctrl.$viewValue );
                }
            });
        }
    };
});

并将re-apply添加到您的元素

<input type="text" ng-pattern="validate()" re-apply="" name="userName" ng-model="user.name" required> <span class="error" ng-show="myForm.userName.$error.required">

演示 http://jsfiddle.net/Dztev/5/

答案 1 :(得分:0)

这也可以直接在控制器中完成。这将监视输入stuff.name,如果它发生变化,它将清除scope.stuff.results字段。

$scope.$watch("stuff.name", function(newValue, oldValue){
  if(newValue != oldValue)
    $scope.stuff.results = "";
});