表单验证与隔离指令相结合是删除范围值

时间:2014-06-17 22:47:41

标签: javascript angularjs validation

当我将指令与隔离范围与自定义验证结合使用时,验证在验证失败时将scope值设置为undefined

以下是代码的{jsfiddle:http://jsfiddle.net/5mKU3/7/

html:

<div ng-app="myApp">
    <div ng-controller="example">
        someModel: {{someValue}}<br>
        <input type="text" isolate ng-model="someValue" validate />
    </div>
</div>

JS:

angular.module('myApp', []).directive('isolate', function () {
    return {
        require: 'ngModel',
        scope: {}
    };
}).directive('validate', function () {
    return {
        require: 'ngModel',
        link: function (scope, element, attrs, ctrl) {
            ctrl.$parsers.unshift(function (value) {
                value = value || '';

                if (value.length < 10) {
                    ctrl.$setValidity('fail', true);
                    return value;
                } else {
                    ctrl.$setValidity('fail', false);
                    return undefined;
                }
            });
        }
    };
}).controller('example', function ($scope) {
    $scope.someValue = '1234';
});

输入超过10个字符时验证失败。如果验证失败,如何$scope.someValue没有重置为undefined

我目前使用的角度版本是1.2.18。

1 个答案:

答案 0 :(得分:0)

ngModelOptions.allowInvalid设为true

您的输入将是:

<input type="text" isolate ng-model="someValue" validate ng-model-options="{allowInvalid:true}"/>

$validate() method's description

验证此信息