Как заставить NgModelController поставить свойству модели null
Недавно начал разбираться с ангуляром и столкнулся с одной проблемой.
Мне необходимо допилить одну директиву (контрол для формы) Для очистки значения использую ngModel.$setViewValue(null) при этом в модель записывается undefined. Не могу понять, как сделать так, чтобы вместо
{
uname: 'blablabla';
ugroup: undefined;
}
было
{
uname: 'blablabla';
ugroup: null;
}
Пробовал пропускать значение через $parsers и $formatters. Но в итоге все-равно получаю undefined. |
Посмотрите на исходник $setViewValue - что он делает со значением?
|
Цитата:
|
На элементе input (или там где ng-model) есть атрибут required?
|
FireVolkhov, ага стоял required.
Теперь понял, если на элементе есть required, то в модель пишется undefined. если нет, то null. Спасибо :) |
Не совсем так, просто в Angular required то же директива.
Вот исходник
var requiredDirective = function() {
return {
require: '?ngModel',
link: function(scope, elm, attr, ctrl) {
if (!ctrl) return;
attr.required = true; // force truthy in case we are on non input element
var validator = function(value) {
if (attr.required && ctrl.$isEmpty(value)) {
ctrl.$setValidity('required', false);
return; // <- Все дело вот в этом
} else {
ctrl.$setValidity('required', true);
return value;
}
};
ctrl.$formatters.push(validator);
ctrl.$parsers.unshift(validator);
attr.$observe('required', function() {
validator(ctrl.$viewValue);
});
}
};
};
И там видно, если не пройти валидацию (a null не проходит), то выполнетсяreturn;и результат undefined |
| Часовой пояс GMT +3, время: 06:41. |