我已按照https://docs.angularjs.org/guide/forms下的自定义验证下的文档定义了验证程序。但由于某些原因,link
函数未被调用。我可以告诉它没有被调用,因为日志消息没有出现。
HTML
<textarea name="topic1Data" ng-model="inputCtrl.inputValues.topic1Data" rows="10" cols="30" required hasHeaders></textarea>
的JavaScript
inputForm.directive('hasHeaders', function() {
return {
require: 'ngModel',
link: function(scope, elm, attrs, ctrl) {
console.log("Evaluating hasAtLeastAHeaderRow validator");
ctrl.$validators.integer = function(modelValue, viewValue) {
if (ctrl.$isEmpty(modelValue)) {
// consider empty models to be valid
return true;
}
if (INTEGER_REGEXP.test(viewValue)) {
// it is valid
return true;
}
// it is invalid
return false;
};
}
};
});
其他人报告了相同的症状,但我的问题的原因似乎有所不同:
我做错了什么?
答案 0 :(得分:0)
我通过在HTML中命名has-headers
并在JavaScript中命名hasHeaders
来实现它:
HTML
<textarea name="topic1Data" ng-model="inputCtrl.inputValues.topic1Data" rows="10" cols="30" required has-headers></textarea>
的JavaScript
inputForm.directive('hasHeaders', function() {
return {
require: 'ngModel',
link: function(scope, elm, attrs, ctrl) {
console.log("Evaluating hasAtLeastAHeaderRow validator");
ctrl.$validators.integer = function(modelValue, viewValue) {
if (ctrl.$isEmpty(modelValue)) {
// consider empty models to be valid
return true;
}
if (INTEGER_REGEXP.test(viewValue)) {
// it is valid
return true;
}
// it is invalid
return false;
};
}
};
});
我认为,这是关于AngularJS自定义指令命名约定的相关文档:
<强>正常化强>
Angular规范化元素的标记和属性名称以确定 哪些元素匹配哪些指令。我们通常会提到 它们区分大小写的camelCase规范化名称的指令(例如 ngModel)。但是,由于HTML不区分大小写,我们参考 DOM中的指令通过小写形式,通常使用 DOM元素上的破折号分隔属性(例如ng-model)。