如果在保存的数组中找不到结果,则发出警报

时间:2017-07-15 14:55:13

标签: javascript angularjs

我从第一次加载的api中获取数据并将其保存在数组中。然后,当用户指定他/她想要从i搜索的日期范围时,根据用户指定的内容将结果显示在保存的数组中的视图中。它工作得很好,但问题是我能够在用户搜索没有结果时显示错误信息

.controller('billing_statement_ctrl', function($scope, $http, $ionicLoading, $ionicPopup, $cordovaToast, $location, $ionicModal, $filter) {
    $scope.account_number = localStorage.getItem("account_number");
    ///alert if connection fails
    $scope.connect = function() {
      var alertPopup = $ionicPopup.alert({
        title: 'Error',
        template: '<p align="center">Problem Contacting Server</p>',
      });
    };

    $scope.state_request = function() {
      $http.post("http://localhost/server/statement.php", {
        'id': $scope.account_number
      }).success(function(data) {
        console.log(JSON.stringify(data));
        $scope.record = data;
      })

      $scope.from = $filter('date')($scope.sdate, "yyyy-MM-dd" + 'T00:00:00') + 'Z';
      $scope.to = $filter('date')($scope.edate, "yyyy-MM-dd" + 'T00:00:00') + 'Z';


    }

  })

  .filter('dateRange', function() {
    return function(records, from, to) {
      return records.filter(function(record) {
        return record.Date >= from && record.Date <= to;
        if (record == '') {
          alert('its empty')
        } else {
          alert('results found')
        }
      });
    }
  })

使用我的脚本,当它成功或不成功时,我得不到警报。

其次,当页面加载时,我收到此错误Cannot read property 'filter' of undefined

1 个答案:

答案 0 :(得分:2)

您不会收到提醒,因为您在触发警报的条件之前有return

函数中的return之后的代码不会执行。另外,请勿使用alert()进行调试...使用console

console.log()方法

对于初始加载,过滤器正在未定义的输入值上运行,可能是因为在http请求完成之前未定义视图中的变量。因此它不是一个数组,错误告诉你你不能在它上面使用数组方法

如果输入未定义,请调整自定义角度过滤器以返回null或空数组。

.filter('dateRange', function() {
    return function(records, from, to) {
      // return empty array if input not defined or not array
      if(!records || !angular.isArray(records)){
         return [];
      }
      var results = records.filter(function(record) {
         // run console log tests here...before the return
        return record.Date >= from && record.Date <= to;        
      });
      console.log( 'Number of results:', results.length);
      return results;
    }
})