Как я могу переопределить фильтрацию Angular недопустимых значений формы, заставляя Angular сохранять $ viewValue в $ modelValue?
Мне нужно иметь возможность временно сохранять данные, которые нееще не полностью утвержден, затем выполните проверку, когда яЯ готов сделать это постоянным. Но Angular препятствует этому.
У меня есть форма. Пользователь можетsaveDraft()
в ранних версиях формы, которые сохраняются на сервере. Затем, когда пользователь готов, они могутsubmit()
форма, которая сохранит ее с разными флагами, тем самым начав фактическую обработку этих данных.
Проблема янатыкаюсь на ангулярвстроенные проверки. Когда пользователь вводит некоторые данные во входные данные с проверками на них, эти данные кэшируются на$viewValue
имущество. Но если проверка не удалась, это 'S никогда не копируется в$modelValue
свойство, которое является ссылкой на фактическое$scope
свойство, к которому я привязал вход. И, следовательно,недействительным' значение не будет сохраняться.
Но мы должны упорствовать. Мы'Я постараюсь заставить пользователя исправлять свои ошибки проверки позже, когда они отправят (). Кроме того, у нас нет возможности узнать, собирается ли пользовательsaveDraft()
или жеsubmit()
на конкретном экземпляре представления / контроллера, поэтому мы можем '• предварительно настроить представления и проверки по-разному.
Я думаю, что нам нужно как-то перебрать элементы формы и заставить Angular каким-то образом пропустить данные. Но я могу'не найти способ, которыйгибкий и масштабируемый
мы пробовали установку$scope.formName.inputName.$modelValue = $scope.formName.inputName.$viewValue
, но это, кажется, просто расстраивает богов, так как оба значения тогда равны нулюed.I»
мы пытались использовать$scope.formName.inputName.$setValidity('', true)
, но это только обновляет состояние пользовательского интерфейса. Это никогда не трогает.$modelValue
Я могу успешно использовать$scope.model.boundPropertyName = $scope.formName.inputName.$viewValue
но это чувствует себя очень необходимым и победилt разрешить любое расхождение между идентификаторами дляboundPropertyName
а такжеinputName
, Другими словами, вам либо нужны отдельные функции для всех элементов управления формы, либо вы должны полагаться на соглашения об именах. Оба из которых очень хрупкие.
Итак ... как я могу получить это$modelValue
обновлено элегантно? И / или есть ли другой, лучший способ получить те же результаты, при которых иногда я могу продолжать с проверкой, а иногда без?
Другие варианты яЯ рассматриваю, но не доволен:
Запустите проверку вручную, только когда пользователь нажимает submit (). Но это побеждает значение UX мгновенной встроенной проверки в пользовательском интерфейсе. С таким же успехом мы могли бы просто переложить всю валидацию на сервер и каждый раз совершать обходные действия.Сделайте копии ngModel и ngModelController и сделайте обезьяны-патчи для обновления$modelValue
независимо от действительности. Но это взламывает структуру, когда должен быть более элегантный путь.(Примечание: Angular, по-видимому, фильтрует данные в соответствии соба направления, Если вы установите значение по умолчанию для модели для formData.zip из '1234'который неДостаточно символов для проверки, Angular недаже не показывай. Никогда не достигает начального$viewValue
.)