我必須設計一個經典的,基於表單的運營Web應用程序。AngularJS和可重複使用,強制執行的字段驗證規則
每個表單都包含一些控件,主要是輸入控件。這些控件中的許多控件都有驗證或行爲規則,某些規則僅對單個控件有效(獨立檢查),有些則依賴於其他控件的值(依賴性檢查)。
此外,一些控件在不同的表單中具有相同的語義含義。
例如,「客戶名稱」輸入字段應始終具有50個字符的最大長度,並且它在許多不同的表單之間共享。另一個例子是,「文檔」組合框是基於年齡字段進行過濾的(即:年齡小於18歲的客戶具有不同的文檔)。如果該組合中有零個文檔,則它應該完全消失。
規則應該集中和重用。儘管我可以在包含在控制器中的函數中定義規則,但我不希望程序員爲記住爲某個字段添加驗證規則,因爲我確信他不會。
我所追求的是一種基於AngularJS的智能方式,爲所有表單的字段定義可重複使用的規則,以及強制程序員自動在字段中使用這些規則的方式。理想情況下,規則應該在服務器上定義並在需要時下載,因爲出於安全原因,我必須在服務器端重新進行檢查。
我已經看過角度自定義指令,但我不確定這是實現這種事情的正確方法。它肯定有效,但我想知道如何定義跨場規則並強制使用它們。
例如,使用自定義指令myCustomerName爲客戶字段名:
app.js VAR對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