AngularJS NG-требуется лучше реализовать из контроллера?

0

Я думаю о хорошем способе реализации ng-required. Скажем, у меня есть набор входов с ng-обязательным в моем приложении.

<input type="text" id="one" />
<input type="date" id="two" />
<input type="radio" id="three" />
<input type="checkbox" id="four" />

Я хотел бы что-то сделать в контроллере, где я мог бы передать массив необходимых полей. Я думаю, что если бы я создал массив таких элементов, как:

var myEl = angular.element( document.querySelector( '#some-id' ) );

и некоторые, каким образом заданы требуемые свойства.

Я пишу директиву, которая решила бы из массива, если требуется поле, если оно не существует в массиве, оно не требуется, если это необходимо, оно требуется.

В конечном счете, я хотел бы иметь массив, который позволяет передавать поля таким образом:

var reqArray = ('#id', ('#id1' || 'id2')) etc. 

Работает так же, как и операторы условной логики:

#id требуется

# id1 || # id2 требуется, но не оба.

Не знаете, с чего начать, или если это возможно в Угловом.

Это упростит изменение обязательных полей в больших приложениях без необходимости изменения реального html.

Теги:

1 ответ

1
Лучший ответ

Это можно сделать, но угловые уже предоставляют собственные способы проверки форм. Некоторые краткие сведения:

  • Тег формы должен иметь атрибут novalidate, чтобы предотвратить проверку HTML5. <form name="myForm" novalidate>

  • При этом теперь угловой может взять на себя ответственность за подтверждение, добавив к вашим входам "требуемый" атрибут <input ng-model="myModel" type="text" required>

  • К этому моменту угловой контроль над вашей проверкой, он также может проверять другие атрибуты HTML5, такие как шаблон. <input pattern="[0-9][AZ]{3}" type="text" title="Single digit followed by three uppercase letters."/>

Я предлагаю вам взглянуть на это официальное руководство (также взгляните на руководство по директивам на том же сайте, я хотел связать его, но у меня пока нет представителя).

При этом то, что вы пытаетесь выполнить, также возможно, но скорее избыточно, так как вам придется добавлять атрибут к вашим входам в любом случае (директива и угловая возможность уже проверять), а также требуют ngModel в директиве.

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

Кроме того, запрос на селектор прямо так, как в вашем предложении, не считается "угловым способом". Лучшим способом было бы добавить директиву в ваш элемент формы и получить доступ к элементу через параметр "element" в директиве.

Надеюсь это поможет.

Ещё вопросы

Сообщество Overcoder
Наверх
Меню