LINUX.ORG.RU

Разъясните про валидацию форм на AngularJS

 , , , ,


0

2

В документации пишут, что валидировать можно, если для формы указать name, для элементов указать name, а потом конструкциями типа formaName.elementName.$invalid можно скрывать/показывать всякие сообщения. А хочется еще свериться с сервером на корректность введенных данных. Но, если я указываю name у элементов, то ng-model не присваивает значение, введенное в input поле, в модель данных. Почему такое происходит? Подозреваю, что через биндинг ng-model ангуляр сам вставляет нужный name элементам, а я его тут переделываю, и он не находит чего-то. Но тогда по какому принципу он именует забинденные элементы, чтоб я его имена использовал в валидации формы?

★★★★★

Подозреваю, что через биндинг ng-model ангуляр сам вставляет нужный name элементам, а я его тут переделываю, и он не находит чего-то.

Подозреваешь неверно.

Но, если я указываю name у элементов, то ng-model не присваивает значение, введенное в input поле, в модель данных.

Должен присваивать. Если кажется, что не присваивает, значит, ты что-то напутал со scopes.

anonymous ()

Я бы пошел от обратного. Сначала реализовать показ сообщений прилетающих с бекенда, а уже потом прикрутить местечковые свистелки.

deep-purple ★★★★★ ()
Ответ на: комментарий от deep-purple

Потому, что как только ты сделаешь фронтенд-валидацию, клиенты решат что все сделано и работает.

Jaberwock ★★★ ()
Ответ на: комментарий от Jaberwock

Не совсем поэтому. А потому, что ты (ну или не ты, но всеравно, тесты) сам можешь забыть сделать валидацию на бекенде.

deep-purple ★★★★★ ()
Ответ на: комментарий от deep-purple

Добрались руки снова.

Вот пример на пальцах. Есть форма:

<div ng-controller="regCtrl">
   <form name="registerForm" novalidate="">
      <input name="uLogin" ng-model="user.login" ng-blur="check()"/>
   </form>
</div>

Есть ангуляр-контроллер:

var regCtrl = angular.controller('regCtrl', ['$scope', '$log', function($scope, $log) {
   $scope.user = { login: '' };
   $scope.check = function() {
      $log.debug("LOGIN: "+$scope.user.login);
   }
}]);

это добро в лог выводит пустой логин, когда срабатывает onBlur на поле ввода, хотя в поле ввода что-то есть. Почему так происходит? Как тогда валидировать через сервер? Только после нажатия кнопки? Надо, кстати, по кнопке проверить.

upd: проверил по кнопке. тоже пусто. upd2: а если из инпута убрать name=«uLogin», то в scope юзер заполняется.

bvn13 ★★★★★ ()
Последнее исправление: bvn13 (всего исправлений: 3)
Ответ на: комментарий от deep-purple

Я понял, в чем у меня был косяк. :)

Стояло свойство минимальной длины в этом инпуте. Если я писал меньше символов, то в модели не изменялись данные. И наоборот.

bvn13 ★★★★★ ()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.