1

我有一个由两个字段位置 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。

4

1 回答 1

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

于 2017-05-16T01:30:32.473 回答