Мне нужно разработать классическое, основанное на форме рабочее веб-приложение.AngularJS и правила повторного использования, принудительные правила проверки полей
Каждая форма содержит некоторые элементы управления, в основном элементы управления вводом. Многие из этих элементов управления имеют правила проверки или поведения, некоторые правила действительны только для одного элемента управления (независимые проверки), а некоторые зависят от значений других элементов управления (зависимых проверок).
Кроме того, некоторые элементы управления имеют одинаковое семантическое значение в разных формах.
Например, поле ввода «имя клиента» должно всегда иметь максимальную длину 50 символов и делиться между различными формами. Другим примером является то, что поле со списком «документы» фильтруется на основе поля возраста (то есть: у клиента с менее чем 18-летним периодом имеются разные документы). Если в этом комбо есть нулевые документы, он должен полностью исчезнуть.
Правила должны быть централизованы и использованы повторно. Хотя я могу определять правила в функциях, содержащихся в контроллерах, я не хочу, чтобы программист , чтобы добавить правило проверки для определенного поля, потому что я уверен, что он этого не сделает.
Что мне нужно - это умный способ определения правил многократного использования полей для всех форм, основанный на AngularJS, и способ заставить программистов автоматически использовать эти правила в полях. В идеале правила должны быть определены на сервере и загружены, когда это необходимо, потому что мне придется повторить проверку на стороне сервера по очевидным соображениям безопасности.
Я смотрел угловые пользовательские директивы, но я не уверен, что это правильный способ реализовать такую вещь. Это, безусловно, работает, но я хотел бы знать, как определить правила кросс-поля и обеспечить их использование.
Например, используя пользовательские директивы myCustomerName для имени поля клиента:
app.js уаг MYAPP = angular.module ("MyApp", []);
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 И это хорошо, но правила определены только в клиенте и не являются поперечным полем.
Valdr также может загружать правила с сервера. Прочтите https://github.com/netceteragroup/valdr#wire-up-your-back-end. – tomepejo