フォームには多くの検証を行うフィールドがあります。Angularで1回のhttp呼び出しに基づいて複数の検証を行う方法
最初は、それぞれ独自のエラーメッセージを持つ複数のディレクティブに構造化しました。
しかし、検証ではバックエンドの非同期呼び出しが使用されるため、突然1つのフィールドで同じデータサービスに対して5回のhttp呼び出しを行っていました。私はこれをより効率的に書く方法を理解しようとしています。
1つの$async
のDataServiceを呼び出すバリデータ、および.then
後の最初の非同期関数の内部に複数の定期的な$validators
を持つことが可能である場合、私は思っていました。私はこれを実験しましたが、ネストされた$validators
にはまったく届かないようです。
また、サービスで一度呼び出すことを試みましたが、フィールドのmodelValueが変更されたときに更新する方法を知りません。その結果、それぞれの検証ディレクティブに情報が渡されます。これをサービスの非同期検証として実行し、ディレクティブが検索する範囲に応答を添付できますか?
TLDR;
返されたデータに基づいて1つのhttp呼び出しを行い、複数の検証チェックを実行し、それぞれ独自のエラーが発生することはありますか?例
FOR
私はすべてがこのようになり、約4ディレクティブがあります。それぞれが異なるエラーメッセージを返すために、データの異なる分析を持って
angular.module('validationForField').directive('po', ['$q', '$sce', '$timeout', 'myService', function ($q, $sce, $timeout, myService) {
return {
restrict: 'A',
require: 'ngModel',
link: function (scope, elem, attrs, ctrl, ngModel) {
ctrl.$asyncValidators.validateField = function (modelValue) {
var def = $q.defer();
myService.httpcall(modelValue)
.then(function (response, modelValue) {
if (response.data.status === "Error") {
return def.reject();
}
def.resolve();
}).catch(function(){
def.reject();
});
return def.promise;
}
}
}
}]);
を。それぞれがmyService.httpcallを呼び出して、すべてが同じデータを取得しているため、冗長になります。私は
angular.module('validationForField').directive('po', ['$q', '$sce', '$timeout', 'myService', function ($q, $sce, $timeout, myService) {
return {
restrict: 'A',
require: 'ngModel',
link: function (scope, elem, attrs, ctrl, ngModel) {
ctrl.$asyncValidators.validateField = function (modelValue) {
var def = $q.defer();
myService.httpcall(modelValue)
.then(function (response, modelValue) {
if (response.data.status === "Error") {
return def.reject();
}
ctrl.$validators.checkStatus = function (response) {
if (response.data.data.status === "10"){
return false
}
ctrl.$validators.checkPermissions = function (response) {
return response.data.data.permission){
}
def.resolve();
}).catch(function(){
def.reject();
});
return def.promise;
}
}
}
}]);
このHTTP呼び出しが成功したかどうかについての主な非同期バリがある道、そしてそれが
あなたの質問に関連したフィドルまたはビンを作成するか、少なくともコードの一部を共有できますか? – mamsoudi
@ mamos98はそれを助けますか? – jenryb