如何将$ scope变量包含到自定义过滤器函数中

时间:2017-09-26 13:10:44

标签: javascript jquery css angularjs wordpress

我有一个自定义过滤器,对于输入日期字段,我有一个$ scope过滤器,以17/07/2017的格式显示字符串。任何人都可以帮助我如何在我的自定义过滤器功能中使用$ scope过滤器。

我的控制器功能

app.controller('OutletController', function ($scope, itemsFactory, $filter) {
        itemsFactory.getItems().success(function (data) {
            $scope.outlets = data;
        })
        $scope.fromDate = $filter('date')($scope.from_date, "yyyy-MM-dd");
        $scope.toDate = $filter('date')($scope.to_date, "yyyy-MM-dd");
        $scope.format = function (from_date) {
            $scope.fromDate = $filter('date')(from_date, "yyyy-MM-dd");
            //console.log($scope.fromDate);
        }
        $scope.format = function (to_date) {
            $scope.toDate = $filter('date')(to_date, "yyyy-MM-dd");
            // console.log($scope.toDate);
        }
        $scope.parseInt = function (data) {
            if (data == null) return "";
            return parseInt(data);
        };});

我的HTML

<input type="date" ng-model="from_date" ng-change="format(from_date)">
    <input type="date" ng-model="to_date" ng-change="format(to_date)">

ng repeat

<tr ng-repeat="item in outlets |  dateRange: {from_date:from_date, to_date:to_date, select: selected.field, select2: selectedone.field} ">
            <td>{{ parseInt(item.offerID) }}</td>
            <td>{{ item.merchant }}</td>
            <td>{{ item.startDate }}</td>

我的自定义过滤器

app.filter('dateRange', function ($filter) {
        return function (input, params, fromDate, toDate) {
            var from_date = fromDate;
            var to_date = toDate;
            if (isNaN(params.fromDate)) {
                filtered = input;
            }
            else {
                var filtered = [];
                angular.forEach(input, function (item) {
                    if (params.select2 === "strtdate" && params.select === "gt") {
                        console.log(fromDate);
                        if (item.startDate > params.from_date) {
                       filtered.push(item);

                                       }}
                    else {
                   if (item.startDate == params.fromDate) {
       output.push(item);
      }}
                });
            }
            return filtered;
        };
    });

每当将输入日期放在from_date字段中时,它应该过滤日期&gt;而不是数据表中的输入日期。

提前感谢!

1 个答案:

答案 0 :(得分:0)

您可以尝试以下代码,也可以查看此plunker链接,了解您的示例方案。

<强>模板:

    <input type="date" ng-model="Range.From">
    <input type="date" ng-model="Range.To">
    <table border="1">
      <tr ng-repeat="item in outlets | dateRange: Range">
        <td>{{ item.offerID }}</td>
        <td>{{ item.merchant }}</td>
        <td>{{ item.startDate | date: 'yyyy-MM-dd' }}</td>
      </tr>
    </table>

<强>控制器:

app.filter('dateRange', function ($filter) {
  return function (input, params) {
    if(params.From || params.To){
      var filtered = [];
      angular.forEach(input, function (item) {
        var strDate = new Date(item.startDate);
        if(item.startDate >=params.From && item.startDate <= params.To){
          filtered.push(item);
        }else if(item.startDate >= params.From && (params.To===null || params.To===undefined)){
          filtered.push(item);
        }else if(item.startDate <= params.To && (params.From===null || params.From===undefined)){
          filtered.push(item);
        }
      });
      return filtered;
    } else return input;
  };
});