很长一段时间以来,我一直在尝试使用angularJS(带指令)在输入上创建我自己的验证,但没有什么真正起作用。 即使这个主题在堆栈上被多次处理过,我的指令也不起作用,我对AngularJS感到厌烦。
当用户在我的示例中写入特殊键时,我想要一条错误消息:“hello”,“hi”,“coucou”。
我在小提琴上尝试,但只是第三个键发送错误信息。
我的指示:
.directive('validkey',function(){
return{
require: "ngModel",
link: function(scope, elm, attrs, ctrl){
var forbiddenKeyword = ["hello", "hi", "coucou"];
ctrl.$parsers.unshift(function(viewValue){
console.log(viewValue);
for(var i=0;i<forbiddenKeyword.length;i++){
// console.log(forbiddenKeyword[i]);
if(viewValue == forbiddenKeyword[i]){
ctrl.$setValidity('validkey',false);
console.log("error!!!!!");
}
else{
ctrl.$setValidity('validkey',true);
}
}
return viewValue;
});
}
};
});
对不起我的英语。
我开始用自己的指令写作(宽容!!)
答案 0 :(得分:0)
一旦你点击了forbiddenKeyword,你需要突破你的循环。
例如,如果我们输入“hi”,则代码会在您对“hi”进行测试的循环中将validkey
设置为false。但是在下一个循环中(当您检查coucou
时),您将把密钥重置为true。我们想要添加一个break
,这样一旦你点击了forbiddenKeyword,你就会跳出循环并停止测试其他值。
我已经更新了你的小提琴,所以它现在有效:http://jsfiddle.net/AbKPq/
唯一的变化是添加了休息,所以你在while循环中从这个测试开始:
if(viewValue == forbiddenKeyword[i]){
ctrl.$setValidity('validkey',false);
console.log("error!!!!!");
}
到
if(viewValue == forbiddenKeyword[i]){
ctrl.$setValidity('validkey',false);
console.log("error!!!!!");
break; //quit out of the while loop
}