我想写一个自定义指令来验证输入值:它是否属于指定的范围。问题是如果不知道用于ng-model
的范围变量的名称,我就无法访问ng-model
。考虑到该指令必须重复使用不同的输入,我想直接访问ng-model
。我确实尝试使用scope[attrs.ngModel]
,但得到undefined
值。如何在指令内读取ng-model
值?谢谢。如何从属性指令访问ng-model?
netupApp.directive('between', function() {
return {
restrict: 'A',
require: 'ngModel',
link: function(scope, element, attrs, ngModelCtrl) {
scope.$watch('dataSubmitting', function(dataSubmitting){
if (dataSubmitting) {
var min = Number(attrs.min);
var max = Number(attrs.max);
console.log(attrs.ngModel); // "number"
console.log(scope[attrs.ngModel]); // undefined
var inputText = scope.number; // that is the var used in ng-model
console.log(min); // 10
console.log(inputText); // would be the input value
console.log(max); //20
if (inputText <= min || inputText >= max) {
scope.alerts.push({
msg: 'error',
type: 'danger',
icon: 'warning',
'closable': true
});
}
}
});
}
};
});
为什么你是否需要访问范围(因为你没有)? – dfsq
@dfsq也许有更好的解决方案,我不知道:)我必须编写一些自定义指令来验证输入值,他们应该检查提交操作后的值(没有表单,只是输入),并推送警报msg到示波器的警报数组。 – Georgy
理想指令不需要知道任何有关范围,名称等的信息。它也不需要管理错误消息,这些都应该是控制器/模板的责任。指令不应该决定是否有错误。什么指令必须做只是检查什么是有效性状态。 – dfsq