我有一段代码可以正常运行。但是,我觉得这样做有点长,我觉得我很重复自己。这是一个验证代码段,用于检查所有输入字段的表单,并在您提交后显示错误消息(如果有)。
$scope.save = function() {
var post = new FormData();
post.append("title", $scope.post.title);
post.append("photo", $scope.photo);
post.append("body", $scope.post.body);
post.append("truncBody", $scope.post.truncBody);
if(!$scope.post.title || !$scope.photo || !$scope.post.body || !$scope.post.truncBody){
var thingsLeft= [];
if(!$scope.post.title){
thingsLeft.push(" Title");
}
if(!$scope.photo){
thingsLeft.push(" Cover Image")
}
if(!$scope.post.body){
thingsLeft.push(" Body");
}
if(!$scope.post.truncBody){
thingsLeft.push(" Summary");
}
Messages.error("Please fill out all fields. Fields left:" + thingsLeft);
return;
}else{
post to server
}
}
再次,这完美,没有错误,看起来很棒的客户端。我想知道的是,如果有更好/更短/更干的方式来写这个。
答案 0 :(得分:3)
如果你真的最终拥有了很多这样的代码,你可以写一个辅助函数:
function pushIf(array) {
for (var i = 1; i < arguments.length; i += 2)
if (arguments[i]) array.push(arguments[i + 1]);
}
然后
pushIf(thingsLeft,
!$scope.post.title, " Title ",
!$scope.photo, " Cover Image ",
!$scope.post.body, " Body",
!$scope.post.truncBody, " Summary"
);
答案 1 :(得分:2)
如果thingsLeft
为空,没有剩下的东西,你可以省略if
中列出的双重道具,这会让我个人烦恼:
var thingsLeft= [];
if(!$scope.post.title){
thingsLeft.push(" Title");
}
if(!$scope.photo){
thingsLeft.push(" Cover Image")
}
if(!$scope.post.body){
thingsLeft.push(" Body");
}
if(!$scope.post.truncBody){
thingsLeft.push(" Summary");
}
if ( thingsLeft.length > 0 ) {
Messages.error("Please fill out all fields. Fields left:" + thingsLeft);
return;
}else{
post to server
}
答案 2 :(得分:0)
您可以使用所需属性的数组和hasOwnProperty()
。这些方面的东西:
var requiredFields = ['post.title', 'photo', 'post.body', 'post.truncBody'];
var missingFields = [];
for (field in requiredFields) {
if (!$scope.hasOwnProperty(field)) {
missingFields.push(field);
}
}