我有一个由两个字段A和位置B组成的角形式。 我想要实现的是一个指令,它相应地比较字段和验证,只要字段具有相同的位置,就适当地设置有效或无效字段的样式。
我尝试使用ng-change = validateLocations()
插入逻辑,但根据我所研究的内容,指令更适合上述情况。同样的逻辑也适用于验证from
和to
日期也在日期选择器上。
我试过这样的事情:
.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。
答案 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。