2016-06-03 12 views
0

Ich verwende Angular 1 und einige Validierungslogik in einem Controller wie folgt implementieren zu müssen:Angular Validierungslogik mit Asynchron ruft

$scope.onValidate = function(){ 
    var orderId = $resource("/getorderId"); 
    if (!orderId){ 
     return false; 
    } 

    var isValidAddress = $resource("/checkAddress") 
    if (!isValidAddress){ 
     return false; 
    } 

    // some other checking 

    return true; 
} 

Aber wie wir $ Ressource ist async und kehrt sofort wissen. Meine Frage ist, was der richtige Ansatz in Angular 1 sein sollte, um solche sequentiellen Überprüfungen durchzuführen, die Ergebnisse von der Serverseite erhalten müssen und warten sollten, bis alle Bedingungen überprüft sind, bevor sie zurückkommen.

+0

Wann soll diese serverseitige Validierung stattfinden? Nachdem der Benutzer auf eine Senden-Schaltfläche geklickt hat? – wdanda

Antwort

0

Was ich verstanden habe, war, wollten Sie Validierung auf Änderung des Eingabewerts setzen, müssen Sie $asyncValidator über Eingabefeld ngModel verwenden.

ngModel.$asyncValidators.myValidation = function(modelValue, viewValue) { 
    var value = modelValue || viewValue; 
    var orderPromise = $resource("/getorderId").then(function(orderId){ 
     if (!orderId) 
      return false; 
    }); 

    var isValidAddressPromise = $resource("/checkAddress").then(function(orderId){ 
     if (!isValidAddress) 
     return false; 
    }); 

    // some other checking 

    return $q.all([orderPromise, isValidAddressPromise]).then(function(value){ 
     var result = value[0] || value[1]; //depends on situation change your condition 
     if(result) return result; 
     return $q.reject(result); 
    }) 
}; 
+0

Danke Pankaj. Dieser Ansatz funktioniert für mich. – esun203

+0

Gut zu wissen, klicken Sie auf Pfeil nach oben Danke;) –

Verwandte Themen