Мне нужно разработать классическое рабочее веб-приложение на основе форм.
Каждая форма содержит некоторые элементы управления, в основном элементы управления вводом. Многие из этих элементов управления имеют правила проверки или поведения, некоторые правила действительны только для одного элемента управления (независимые проверки), а некоторые зависят от значений других элементов управления (зависимые проверки).
Более того, некоторые элементы управления имеют одинаковое семантическое значение в разных формах.
Например, поле ввода «имя клиента» всегда должно иметь максимальную длину 50 символов, и оно используется во многих различных формах. Другой пример: поле со списком «документы» фильтруется на основе поля возраста (т. Е. У клиента менее 18 лет есть другие документы). Если в этой комбинации нет документов, она должна полностью исчезнуть.
Правила следует централизовать и использовать повторно. Несмотря на то, что я могу определять правила в функциях, содержащихся в контроллерах, я не хочу, чтобы программист запомнил добавление правила проверки для определенного поля, потому что я уверен, что он этого не сделает. .
Мне нужен умный способ на основе AngularJS определять правила многократного использования для полей для всех форм и способ заставить программистов автоматически использовать эти правила в полях. В идеале правила должны быть определены на сервере и загружены при необходимости, потому что мне придется повторить проверку на стороне сервера по очевидным причинам безопасности.
Я просмотрел специальные директивы angular, но не уверен, что это правильный способ реализовать такую вещь. Это, безусловно, работает, но я хотел бы знать, как определить правила для разных полей и обеспечить их использование.
Например, используя настраиваемую директиву myCustomerName для имени поля клиента:
app.js var myApp = angular.module ("Мое приложение", []);
myApp.directive("myCustomerName",
function()
{
return
{
restrict: 'E',
templateUrl: 'customer_name.html'
};
}
);
customer_name.html
<div class="form-group">
<label for="customerName">Customer Name</label>
<input type="text" class="form-control" id="customerName" ng-model="customerName">
</div>
и т.д., но тогда у меня нет правил перекрестной проверки!
Вместо этого я мог бы определить более общую настраиваемую директиву:
myApp.directive("ufeCheck",
function()
{
return {
restrict: 'E',
templateUrl: function(e, attr) {
return attr.type + '.html';
}
};
}
);
А затем используйте его в html, например:
<ufe_check type="customer_name"></ufe_check>
<ufe_check type="customer_age"></ufe_check>
Но где бы я поместил перекрестную проверку поля? Как мне загрузить правила, определенные сервером?
Я думаю, что мне нужен исполнитель механизма правил, клиентская сторона и совместимая с проверкой форм AngularJS.
Я посмотрел на Valdr: https://github.com/netceteragroup/valdr И это хорошо, но правила определяются только в клиенте и не являются перекрестными.