具有异步调用的角度验证逻辑

时间:2016-06-03 18:18:05

标签: javascript angularjs asynchronous synchronization

我使用Angular 1并且必须在控制器中实现一些验证逻辑,如下所示:

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

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

    // some other checking 

    return true;
}

但是我们知道$ resource是异步的并且会立即返回。我的问题是Angular 1中应该采用哪种方法来执行这样的顺序检查,这种检查需要从服务器端获取结果,并且应该等到所有条件都被检查后再返回。

1 个答案:

答案 0 :(得分:0)

我的理解是,您希望对输入值的更改进行验证,您需要在输入字段$asyncValidator上使用ngModel

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);
    })
};