angularjs在请求之前检查数据

时间:2017-06-20 12:45:22

标签: javascript angularjs request-cancelling

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

控制器:

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...

4 个答案:

答案 0 :(得分:2)

检查find方法

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

if(flag)$http...

答案 1 :(得分:1)

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

这是一个演示:

&#13;
&#13;
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);
}
&#13;
&#13;
&#13;

答案 2 :(得分:1)

你可以试试这个:

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 != ""));

enter image description here

答案 3 :(得分:1)

如果在第一次匹配

时退出循环,你可以加快一点

&#13;
&#13;
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)
{

}
&#13;
&#13;
&#13;