Если вы добавите какую-либо из директив angular для проверки (ng-minlength, ng-maxlength, ng-pattern и т.д.) на вход, привязанный к ветру, он блокирует любой пользовательский ввод, если он найден недействителен.
Если значение из ng-model изначально корректно, оно отображается, но если вы измените значение на что-то недействительное, поле ввода будет очищено, то для модели будет установлено значение null, и вы не сможете ввести все, что может быть изначально инвалид. Однако, если вы скопируете действительное значение в поле, которое оно показывает.
Мне было бы хорошо, если значение модели было установлено равным null, если оно недействительно, если оно не очистило вход, а затем предотвратило изменения.
Также у меня возникает ощущение, что все, что вызывает эту проблему, также испортит u-mask. То же самое происходит и без директив angular.
вот Plunker, который я нашел по аналогичному вопросу, который я изменил, чтобы показать свою проблему: http://plnkr.co/edit/dVsF7GFY65a30soLL5W8?p=preview
Edit
После многих часов исследований я нашел решение, которое работает, хотя я не уверен в каких-либо побочных эффектах.
Это связано с тем, как angular выполняет валидацию в первую очередь, устанавливая значение $modelValue в 'undefined', если он не удаляет какие-либо валидаторы, поскольку он делает это через $parsers и $formatters.
Я нашел этот код в angular (строка 16331), который вызывается каждым валидатором angular:
function validate(ctrl, validatorName, validity, value){
ctrl.$setValidity(validatorName, validity);
return validity ? value : undefined;
}
Я изменил его, чтобы вернуть 'значение' вместо 'undefined':
function validate(ctrl, validatorName, validity, value){
ctrl.$setValidity(validatorName, validity);
return value;
}
Angular все еще корректно устанавливает правильность. Хотя я уверен, что это не лучшее решение или даже хорошее.
Я подозреваю, что проблема возникает, когда angular устанавливает $modelValue в 'undefined', тогда Breeze видит, что модель изменилась и обновляет объект, который затем обновляет модель, которая затем очищает ввод и т.д.... Или что-то вроде этого...
Я нашел, что это полезно в моих поисках. Возможно, это будет полезно для одного из вас, который знает гораздо больше, чем я https://github.com/angular/angular.js/issues/1412