2015-06-17 4 views
2

Как я могу вызвать ошибку при подаче? Предположим, что мы получили форму, состоящую из имени, электронной почты, пароля. Мы проверяем uniqness по электронной почте на стороне сервера, и сервер отправляет объект, например, {email: ['уже принят', 'другая ошибка'] и т. Д. Как я могу использовать форму и запускать ее в полях?Угловые формальные пусковые ошибки

+0

У вас есть какой-либо код, который вы можете показать нам о ваших предыдущих попытках? –

+0

Я рекомендую вам дать этот бесплатный урок egghead.io: https://egghead.io/lessons/angularjs-angular-formly-custom-validation?pl=advanced-angular-forms-with-angular-formly – kentcdodds

ответ

1

Звучит так, как будто вы хотите выполнить асинхронную проверку поля ввода. Я предполагаю, что вы хотите сделать что-то вроде this.

Для конкретного решения см это Blog

+1

@Elrond использует угловую форму, которая имеет простой API '' validators'', который использует API '$ asyncValidators' под капотом. Этот ответ велик для нормальных угловых форм и может работать с угловым формально, но есть более простой способ. – kentcdodds

+0

Не очень, асинхронный валидатор в порядке - он будет действовать «на лету», но к тому моменту, когда пользователь нажмет «отправить», многое может случиться. Окончательная проверка выполняется на стороне сервера и при необходимости возвращает объект с ошибками. Я могу получить этот ответ и отобразить его в окне предупреждения или somthing, но было бы здорово привнести некоторый стиль ошибки в поля с ошибками и т. Д. В Essens мне нужна некоторая функция tap, чтобы сделать makeInvalid (fieldKey) и т. Д. ... там что-то угловато-формально? – Elrond

0

Я вижу, - не знал, угловато-мерно ..

вы можете позвонить службу validaton в Автошоу asyncValidator и мерно затем проанализировать результат и вручную установить состояние проверки в поле с использованием scope.fc.$setValidity. Сообщения могут быть зарегистрированы в разделе validation.

validators: { 
     asyncMultiValidator: { 
     expression: function(viewValue, modelValue, scope) { 
      $http.get('...validation-url...').success(function(result) { 
      //assuming the service returns a map of validation results as {'validationName': isValid (boolean) } 
      angular.foreach(result, function(isValid, validationName) { 
       scope.fc.$setValidity(validationName, isValid); 
      }); 
      }) 

      // this dummy validator is always valid 
      return true; 
     }, 
     message: 'dummy message - not being used' 
     } 
    }, 
    validation: { 
     messages: { 
     required: function(viewValue, modelValue, scope) { 
      return scope.to.label + ' is required' 
     }, 
     remote: function(viewValue, modelValue, scope) { 
      return 'some remote error'; 
     } 
     } 
+0

Если форма проходит всю локальную и удаленную проверку на стороне клиента, то она действительна – Michael

+0

И как насчет этого сценария: форма передает всю проверку на стороне клиента и отправляется на бэкэнд - здесь бэкэнд пытается сохранить, но проверка завершается с ошибкой и возвращает объект {'email': ['email already taken']} - с этого момента я хотел бы передать это формально, чтобы вызвать эту ошибку. Я НЕ хочу проверять этот асинхронный (на лету), но после отправки. – Elrond

+0

Я попытался запустить signup.form. $ SetValidity ('email', false); и это снова отключит кнопку отправки, но поле электронной почты не изменится на состояние ошибки, а также сделать отправку включенной снова невозможно. – Elrond

Смежные вопросы