我有两个工厂(因为它更具可读性)和一个控制器。 我不知道是否可能,但我想将两个工厂的结果发送到一个变量中。
码
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'
};
我不认为我写的是正确的。 但是,这是可能的和/或它是一个好的选择吗?
答案 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
方法)