2015-08-03 2 views
1

Итак, я смотрю на этот кусок кода:Что такое «Угловой» способ обработки формы?

function checkFormElements(field) { 
    if ($scope.options === undefined || $scope.optionsForm.$error[field] === undefined) { 
     return false; 
    } 
    var result = false; 
    $.each($scope.optionsForm.$error[field], function(index, value) { 
     // TODO: There *has* to be a better way than this to get the element. Angular must know the form control, whether it's named or not. 
     var element = $('[name=' + value.$name + ']'); 
     if (!element.prop('disabled')) { 
      result = true; 
     } 
    }); 
    return result; 
} 

$scope.formIsInvalid = function() { 
    return checkFormElements("pattern"); 
}; 

$scope.fieldIsEmpty = function() { 
    if ($scope.options === undefined || $scope.formIsInvalid()) { 
     return false; 
    } 
    return checkFormElements("required"); 
}; 

И я бы очень хотел, чтобы очистить эту TODO.

элементов формы генерируются в директиве по:

template: '\ 
     <input class="output-input" id="{{fieldName}}-input" name="{{fieldName}}" type="text" maxlength="64" ng-model="item.name" ng-pattern="pattern" ng-required="true" ng-trim="false" ng-disabled="item.save===false">\ 
     <div class="save-column" ng-if="showSave"><input type="checkbox" ng-model="item.save" ng-disabled="item.save === undefined" ng-checked="(item.save === undefined) || item.save"></div>\ 
    ', 

Основная функциональность:

  • Есть несколько редактирования поля с экономии поле рядом с ними.
  • Если поля имеют в них нежелательные сообщения, то поле формы $ error.pattern существует. Если поле пустое, тогда существует ошибка $ error.required
  • Мы обрабатываем все подобные ошибки, проверяем, включен ли элемент, генерирующий его (поскольку блокировка отключений может содержать нежелательный контент или быть пустым), и если они это сделают, мы объявляем форму недействительной и, следовательно, не подходим для отправки.

Похоже, что есть способ решить это, что более похоже на угловой стиль, и я хотел бы знать, что это такое.

+0

Возможно, вы захотите проверить этот блог - https://scotch.io/tutorials/angularjs-form-validation – callmekatootie

+0

[Здесь] (https://github.com/paulyoder/angular-bootstrap-show-errors) является хорошей статьей об оценках angularjs с загрузкой –

ответ

-1

Это не так. Контролерам нужно делать как можно меньше работы. Вам нужно использовать директивы для проверки формы. Директива описывает поведение поля, а затем вы называете его в шаблоне:

<form name="myName" novalidate ng-submit="action(myName)"> 
    <input class="output-input" id="{{fieldName}}-input" name="{{fieldName}}" ng-model="item.name" .... myDirective> 
</form> 

Также MAXLENGTH, MINLENGTH, требуется являются директивы:

angular.module('myModule.directive', []) 

.directive('myDirective', function() { 
    return { 
     restrict: 'A', 
     require: 'ngModel', 

     link: function(scope, elem, attrs, ctrl) { 
      scope.$watch(attrs.ngModel, function(value) { 
       //function checking if field is valid or not 
       scope.myName.item.name.$setValidity('myDirective', isValid); 
      }); 
     } 
    } 
}) 

Я рекомендую вам чтение angularjs руководства для директив: https://docs.angularjs.org/guide/directive

+0

Форма * * указана в директиве, это только верхний блок кода, который находится в контроллере. Если я чего-то не упускаю, ваш код, по-видимому, не включает код, который обрабатывает регулярное выражение, или проверяет значение пустоты, либо проверяет значение, которое является причиной того, что пытается решить этот код. – deworde

+0

В принципе, что «// функция проверки правильности поля или нет» - это соответствующий бит, в котором мне нужна помощь. – deworde

+0

scope. $ Watch отслеживает изменения в вашей форме. Вы не должны проверять все поля при каждом изменении. Аргумент value - это изменение вашей формы. В отмеченном месте с комментарием вы можете сделать свой: var myRegEx =/^ MYREGEX $/i; if (myRegEx.test (значение) == false) –

0

Вам необходимо увидеть все свойства формы, указав название. Render Ваше имя, чтобы увидеть все AngularJS об этом знают.

<form name="myForm"> 

</form> 

{{myForm}} 

Думаю, вам также потребуется ngModel, но я не уверен, что вы здесь делаете. Не могли бы вы добавить скрипку или фотографию?

+0

В какой-то момент я попытаюсь привести пример в скрипт и запустить его, но основное поведение заключается в том, что для каждого поля, созданного с помощью этой директивы в последнем поле, нам нужно чтобы проверить, нарушен ли ng-шаблон, или если ng-требуемое состояние нарушено, но только если ng-disabled имеет значение false.Это то, что делает вышеприведенный код, но самонадеянным басапным способом. – deworde

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