这是我问题的小提琴 它非常简单......似乎角度遇到问题。
http://plnkr.co/edit/5diCIhFoWX8FneSSBkfA?p=preview
说明
我正在使用ng-model-options,因此只有在输入上出现模糊事件时才能更新模型。
<input type="text" ng-model="myText" ng-model-options="{ updateOn : 'blur' }">
这样可以正常工作,但是当我添加一个指令来触发$ validators时,myText
范围变量会在$validators
返回false时消失。
<input type="text" ng-model="myText" ng-model-options="{ updateOn : 'blur' }" check-errors>
指令
.directive('checkErrors', function(){
return {
require : 'ngModel',
link : function(){
ngModel.$validators.validHour = function(modelValue){
return true;
};
}
};
});
要查看问题,请将return true;
更改为return false;
更改输入并创建模糊事件。
修改
新的Plunker:
http://plnkr.co/edit/5diCIhFoWX8FneSSBkfA?p=preview
我认为它应该在ng-repeat中引发问题,但事实并非如此。
答案 0 :(得分:2)
看来这是Angularjs中的正确行为,这意味着你想做什么呢?
以下是一些选项......
将 allowInvalid:true 添加到您的选项中,会显示正在呈现的文本,但是您将否定验证。
查看更新的plunker link
ng-model-options="{ updateOn : 'blur', allowInvalid: true }"
<强>更新强>
尝试在Angular代码库中找到$ validators,或许这与它的正确行为有关。
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;
看起来ctrl。$ modalValue只有在模型通过验证时才会设置为更新,或者未定义,这就是为什么你的
<pre> {{ appCtrl.test }} </pre>
正在消失。没有任何价值可以呈现。