验证2个角度表单字段不具有相同的内容

时间:2017-05-15 23:55:00

标签: angularjs angularjs-directive angular-validation

我有一个由两个字段A和位置B组成的角形式。 我想要实现的是一个指令,它相应地比较字段和验证,只要字段具有相同的位置,就适当地设置有效或无效字段的样式。

我尝试使用ng-change = validateLocations()插入逻辑,但根据我所研究的内容,指令更适合上述情况。同样的逻辑也适用于验证fromto日期也在日期选择器上。

我试过这样的事情:

.directive("locationANotEqual", function () {

        return {

            restrict: "A",
           require: "ngModel",
            link: function (scope, element, attr, ctrl) {

                ctrl.$validators.locationNotEqual= function (modelvalue) {
                    if (modelvalue !== scope.form.locationB) {
                        return true;

                    } else {

                        return false
                    }
                }
}
}
});

我在这方面把属性放在locationA输入字段上。 我想要的是能够在单个指令中合并两个字段的检查,而不是2。

1 个答案:

答案 0 :(得分:0)

在指令中添加另一个参数,并与该值进行比较,而不是scope.form.locationB。在该值上调用attributes.$observe进行更改,以便可以将指令的模型标记为有效/无效。

使用

data-ng-model-options="{allowInvalid: true}",以便在值匹配时,仍然设置模型。

app.directive('validateNotEqual', [
    function() {
        return {
            restrict: 'AE',
            require: '^ngModel',
            link: function(scope, element, attributes, ngModelCtrl) {
                if (!ngModelCtrl) {
                    return;
                }

                var errorKey = 'notEqual';

                ngModelCtrl.$validators[errorKey] = function(value) {
                    return value !== attributes.validateNotEqual;
                };

                attributes.$observe('validateNotEqual', function(value) {
                    ngModelCtrl.$setValidity(
                        errorKey,
                        value !== ngModelCtrl.$modelValue);
                });
            }
        };
    }
]);

请参阅plunker