在angular js中使用date和keyword过滤数据

Filtering data usig date and keyword in angular js

本文关键字:keyword 过滤 数据 date angular js      更新时间:2023-09-26

我有一个包含数据的表,并说我从array1传递数据。在表的顶部,我有3个面板和一个按钮fromDate,toDate,关键字和搜索按钮。我想根据3输入的数据被过滤,一旦我点击搜索按钮。我的想法是当我点击搜索按钮时使用ng-click调用一个函数。

HTML:

& lt;button type="button" class="btn btn-primary pull-right" ng-click="filter(toDate,fromDate,text)">Search</button>

Javascript:

$scope.filter = function (toDate, fromDate, text) {
    var d1 = fromDate.format('MM-DD-YYYY');

    var d2 = toDate.format('MM-DD-YYYY');
    for (var i = 0; i < arr1.length; ++i) {
        if (arr[i].match(/text/g) != null && arr1[i].dateReported >= d1 && arr1[i].dateReported <= d2) {
            newarr[i] = arr[i];
        }
    }
};

但是我不知道如何打印和何时打印新的数组。有更好的方法吗?谢谢你

我认为您不需要将这三个参数传递给控制器方法。相反,您可以将这些变量公开给$scope,然后在过滤器方法中引用$scope变量。

下面是一个快速的例子,应该可以帮助你走上正确的轨道。请注意,这是在控制器中使用controllerAs语法。更多信息可以在这里找到。此外,我使用indexOf函数而不是执行正则表达式搜索。

function fooController($log, model) {
   var self = this;
   self.fromDate = null;
   self.toDate = null;
   self.filterText = null;
   self.result = [];
   self.onFilter = filter;    
   // Populate our array from external source.
   var _myArray = model.populateArray();
   function filter() {      
     // May want to check and ensure that self.fromDate, self.toDate, and self.filterText 
     // are defined.  Exit gracefully or default them if not.
     // Splice array rather than initialize to '[]' so we don't lose the reference in the scope
     self.result.splice(0, self.result.length);  
     for(var i=0; i<_myArray.length; i++) {
       if (_myArray[i].indexOf(self.filterText) >= 0) && _myArray[i].dateReported >= self.fromDate && _myArray[i] <= self.toDate) {
         self.result.push(_myArray[i]);
       }
     }
     $log.info(result);
   };
};
那么你的HTML看起来就像
<button type='button' class='btn btn-primary pull-right' ng-click='vm.onFilter()'>Filter Data</button>