AngularJS连接两个函数

时间:2016-06-06 07:45:15

标签: angularjs

我有两个工厂(因为它更具可读性)和一个控制器。 我不知道是否可能,但我想将两个工厂的结果发送到一个变量中。

vm.result = [];
vm.validate = validate;
function validate(password1, password2) {
    vm.result = comparePasswordFactory.compare(password1, password2) + validNumberFactory.valid(password1);
    return vm.result;
}

比较回报:

return {
     color: 'green',
     text: 'Passwords match',
     validate1: 'true'
};

有效退货:

return {
    text: 'Number should be between 12 and 45',
    validate2: 'false'
};

我不认为我写的是正确的。 但是,这是可能的和/或它是一个好的选择吗?

1 个答案:

答案 0 :(得分:1)

为了验证使用这两个功能,您必须阅读并比较其validate1 / validate2属性

var passwordOK = comparePasswordFactory.compare(password1, password2).validate1 === 'true';
var numberOK = validNumberFactory.valid(password1).validate2 === 'true';
vm.result = passwordOK && numberOK;

提示:更好的方法是使用boolean值而不是字符串,例如。

return {
    validate: false
}

亲方式:考虑在您的工厂中使用一致的api,然后您可以执行以下操作:

var validators = [comparePasswordFactory, validNumberFactory];
var isValid = true;
for(var i=0;i<validators.length;i++){
    if(!validators[i].validate.call(this, password1, password2)){
        isValid = false;
        break;
    }
}
vm.result = isValid;

然后你可以轻松添加另一个验证器(注意所有工厂必须实现validate方法