【问题标题】:Data filter "from, to" Angular数据过滤器“从,到”Angular
【发布时间】:2017-05-13 02:13:15
【问题描述】:

这是我的 json :

[
    {
        "name": "2QQQJohnQQQ11_12_1998",
        "age" : "18"
    },
    {
        "name": "1QQQEvaQQQ05_11_1989",
        "age" : "21"
    },
    {
        "name": "4QQQCasperQQQ12_06_1994",
        "age" : "13"
    },
    {
        "name": "3QQQBeanQQQ30_12_1996",
        "age" : "6"
    }]

我的HTML:

 <thead>
                    <tr>
                        <th class="text-center">type</th>
                        <th class="text-center">name</th>
                        <th class="text-center">date</th>
                        <th class="text-center">age</th>
                    </tr>
                </thead>
                <tbody>
                    <tr ng-repeat="name in namesplit | filter:dateFilterFunction | orderBy:'time'">
                        <td>{{name.type}}</td>
                        <td>{{name.name}}</td>
                        <td>{{name.time | date}}</td>
                        <td>{{name.age}}</td>
                    </tr>
                </tbody>

我的 javascript 文件:

var app = angular.module('app', []);
    app.service('service', function($http, $q){
        var deferred = $q.defer();

        $http.get("datesss.json").then(function(data){
            deferred.resolve(data);
        });

        this.getNames = function(){
            return deferred.promise;
        }
    });
    app.controller('secondCtrl', function($scope, service){
        var promise = service.getNames();
        promise.then(function(data){
            $scope.names = data.data;
            $scope.namesplit = $scope.names;
            $scope.namesplit.map(function(item) {
                item.type = item.name.split('QQQ')[0];
                item.data = item.name.split('QQQ')[2].split('_');
                item.name = item.name.split('QQQ')[1];
                item.time = new Date(parseInt(item.data[2],10),parseInt(item.data[1],10)-1,parseInt(item.data[0],10));
        });
    });
});

我正在做一个表格,我试图做的是过滤“从,到”来过滤数据(name.time)。我的 HTML 代码:

<input type="date" ng-model="dateFilter.from" class="form-control" />
<input type="date" ng-model="dateFilter.to" class="form-control" />

我在控制器中的代码:

$scope.dateFilter={};
                $scope.dateFilterFunction= function(name){
                    return (name.time>$scope.dateFilter.from && name.time<$scope.dateFilter.to);
        }

它没有工作。有人帮忙吗?提前致谢。

【问题讨论】:

  • 你的代码的输出是什么,我的意思是你现在得到了什么?
  • 我的表中没有任何内容,但是当我从 ng-repeat "filter:dateFilterFunction" 中删除时,我一切正常
  • 您是否仅在输入时出现错误而没有值?在这种情况下,尝试使用空值初始化您的过滤器,$scope.dateFilter={from:null, to:null};

标签: javascript angularjs json filter


【解决方案1】:

试试这个date filter

我们需要声明过滤器如下:-

.filter('dateFilterFunction',function(){
  return function(data, from, to) {
    if (!from && !to) return data;
    var newData = [];
    angular.forEach(data, function(item){
      if (item.time >= from && item.time <= to) {
           newData.push(item);  
      }

    });
    return newData;
  };
});

【讨论】:

  • 你能不能给我一个提示,在这个过滤器中改变什么来过滤数据前只“for”,没有“to”?
  • 因此,如果您不需要 to,您可以删除第三个参数,使其看起来像 return function(data, from) 并将 dateFilterFunction:dateFilter.from:dateFilter.to 更改为 dateFilterFunction:dateFilter.from 本质上删除 dateFiler.to。每个: 都充当将参数传递给过滤器函数的一种方式。
  • 我的意思是,过滤器能够过滤“从,到”和单独“从”或单独“到”:) 非常感谢您的回答!
  • 试试(from &amp;&amp; item.time &gt;= from) || (to &amp;&amp; item.time &lt;= to) 基本上我们使用的是OR条件。
猜你喜欢
  • 2017-02-01
  • 2018-08-21
  • 2016-10-24
  • 2017-10-12
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多