angularjs 请求前检查数据

angularjs checking data before request

我正在向我的 php 脚本发送数据。数据看起来像

控制器:

app.controller('searchCtrl', function($scope,$rootScope,$http,$q){
  $scope.search = function( values , type) {
    if($scope.abort) {
        $scope.abort.resolve();
    }
    $scope.abort = $q.defer();
    var data={};
    data.values=values;
    data.type=type;

    $http.post("search.php", data,{timeout:$scope.abort.promise}).then(function success (response) {

            $rootScope.search_result=response.data;
        },function error (response){
            console.log("Request cancelled");
        }
    );
  };
});

但我想检查列表中的一个数组项是否有 属性 val!="";除了

之类的循环之外,还有什么方法可以检查它吗?
var flag=0;
for(var i=0; i<values.length; i++){
    if(values[i].val!="") flag=1;
}
if(flag)$http...

?

您的 values 数组似乎在一个对象中。所以你应该使用 yourObjName.values 来访问它。

这是一个演示:

var myData = {
    type: 'find_company', 
    values: [
        {name: 'Rob', val: ''},
        {name: 'Jon', val: '1'},
        {name: 'Aria', val: ''},
        {name: 'Ned', val: '2'},
    ]
};

var flag = 0;
for(var i = 0; i < myData.values.length; i++) {
    if(myData.values[i].val != "") flag++;
}

if(flag) {
    /* $http.post */
    console.log('flag is:', flag);
}

检查find方法

var flag = data.values.find(function(element){
     return element.val != ''
})

if(flag)$http...

你可以试试这个:

var array = [{val:"",name:"lucas"},{val:"12",name:"jaque"},{val:"12",name:"celine"},{val:"sdfsdf",name:"bruno"},{val:"",name:"ugo"},{val:"",name:"json"}]

console.log(array.filter(x => x.val != ""));

如果你在第一次匹配时退出循环,你可以让它更快一些

var flag = false;
for(var i = 0; i < myData.values.length; i++) {
    if(myData.values[i].val != ""){ 
      flag=true;
      i = myData.values.length;
    }
}

if(flag)
{

}