Javascript 当$validators返回false时,使用ng模型选项删除范围变量
这就是我的问题所在。Javascript 当$validators返回false时,使用ng模型选项删除范围变量,javascript,angularjs,Javascript,Angularjs,这就是我的问题所在。 这很简单。。。似乎angular遇到了一个问题 说明: 我使用的是ng模型选项,因此只有在输入上出现模糊事件时,才能更新模型 <input type="text" ng-model="myText" ng-model-options="{ updateOn : 'blur' }"> 指令 .directive('checkErrors', function(){ return { require : 'ngModel', link :
这很简单。。。似乎angular遇到了一个问题 说明: 我使用的是ng模型选项,因此只有在输入上出现模糊事件时,才能更新模型
<input type="text" ng-model="myText" ng-model-options="{ updateOn : 'blur' }">
指令
.directive('checkErrors', function(){
return {
require : 'ngModel',
link : function(){
ngModel.$validators.validHour = function(modelValue){
return true;
};
}
};
});
要查看问题,请更改并返回true
to返回false代码>更改输入并创建模糊事件
编辑
新Plunker:
我认为应该在ng repeat中触发问题,但事实并非如此。在Angularjs中,这似乎是正确的行为,这意味着您希望做什么
这里有一些选择
通过向选项中添加allowInvalid:true,将显示正在呈现的文本,但随后将否定验证
查看更新的plunker
更新
试图在Angular代码库中找到$Validator,这可能与正确的行为有关
看起来ctrl.$modalValue只有在模型通过验证或未定义时才被设置为更新,这就是您的
<pre> {{ appCtrl.test }} </pre>
{{appCtrl.test}
正在你身上消失。没有可显示的值。用于创建链接,并向您表示感谢。该问题已编辑,其中包含链接。用小提琴很容易理解。真的不知道为什么。如果使用像type=“email”
这样的内置验证器,则执行相同的操作。我刚刚进行了另一次编辑。如果我删除我的验证器,将会有一个type=“email”。。。好的,谢谢你。我认为默认值应该是true
ng-model-options="{ updateOn : 'blur', allowInvalid: true }"
ctrl.$$runValidators(modelValue, viewValue, function(allValid) {
// If there was no change in validity, don't update the model
// This prevents changing an invalid modelValue to undefined
if (!allowInvalid && prevValid !== allValid) {
// Note: Don't check ctrl.$valid here, as we could have
// external validators (e.g. calculated on the server),
// that just call $setValidity and need the model value
// to calculate their validity.
ctrl.$modelValue = allValid ? modelValue : undefined;
<pre> {{ appCtrl.test }} </pre>