我们可以访问 customfilter.Trying 中的用户输入值以从控制器或直接在 customfilter 中访问用户输入的数字吗

Can we access user input value in customfilter.Trying to access user input number from controller or directly in customfilter

我是 angular js 的新手。在这里,我尝试通过从 currentTemp 中减去用户输入 (x) 来根据温度过滤数据 variable.But 不确定我是否可以访问自定义中的用户输入值 filter.I 我计划在以后的日期 on.For 使用相同的东西现在这可能 suffice.Please 提供关于使用客户文件管理器执行此操作的可能性的反馈(使用输入值并减去它在自定义过滤器中)。任何其他逻辑也会非常有帮助。

http://plnkr.co/edit/Qzne7wfnSa2keRcvbUUV?p=preview

var app = angular.module('tempfilter', []);

app.controller('MainCtrl', function($scope) {
  
  $scope.sensordata = [{name:'Rob',"Date": "2014-02-16T00:00:00.000Z","Temp":42},
  {name:'Bob',"Date": "2012-02-16T20:27:11.507Z","Temp":50},
  {name:'Tom',
  "Date": "2012-02-16T20:27:11.507Z","Temp":60},
  {name:'Sinclair',"Date": "2012-02-16T20:27:11.507Z","Temp":65}];
  $scope.condEqual=function(){
  
  var x = document.getElementById("myNumber").value;
  document.getElementById("demo").innerHTML = x;
  }
  
});

app.filter('tempo', function() {
    return function( items, field ) {
 

      var filtered = [];
   var x=2;
      var currentTemp=62;
        
      angular.forEach(items, function(item) {
        if (item[field]<= currentTemp){
          filtered.push(item);
        }
      });
      return filtered;
    };
});
<!DOCTYPE html>
<html ng-app="tempfilter">
  
  <head lang="en">
    <meta charset="utf-8">
    <title>DateFilter</title>
    <script src="https://ajax.googleapis.com/ajax/libs/angularjs/1.0.3/angular.min.js"></script>
    <script>
      document.write('<base href="' + document.location + '" />');
    </script>
    <script src="script.js"></script>
 
</head>
  
  <body ng-controller="MainCtrl">
  <input type="number" id="myNumber" value="2">
<button ng-click="condEqual()">Enter</button> </br>
<p id="demo"></p>
   Filtered list:
 <ul>
      <li ng-repeat="s in sensordata | tempo:'Temp'">{{s.Date|date:'MM/dd/yyyy'}}
      {{s.name}}
   {{s.Temp}}

    </li>
    </ul>
 
 Full List:
 <ul>
      <li ng-repeat="s in sensordata ">{{s.Date|date:'MM/dd/yyyy'}}
      {{s.name}}
   {{s.Temp}}

    </li>
    </ul>
  </body>

</html>

(我在这里尝试做的主要事情是根据用户输入的日期 i.e.based 过滤数据,即如果用户输入特定值,例如 3,我应该能够从当前日期中减去该值,然后显示 3 天后的所有数据。 即用户输入 3 和今天的日期 2/19/2015..我将过滤过去三天的所有数据)。现在尝试使用温度将对以后的日期使用相同的逻辑

将您的输入与模型绑定,然后您可以直接将该模型传递到您的自定义过滤器中,如下所示

<ul>
   <li ng-repeat="s in sensordata | tempo:'Temp':myNumber">{{s.Date|date:'MM/dd/yyyy'}}
      {{s.name}}
      {{s.Temp}}
   </li>
</ul>

如果您想为您的输入设置默认值,那么您可以在您的控制器中将您的模型初始化为 $scope.myNumber=62

您可以在控制器中定义一个函数并将该函数用作过滤器,如下所示:

<ul>
      <li ng-repeat="s in sensordata | filter:filterByTempo('Temp',myNumber)">{{s.Date|date:'MM/dd/yyyy'}}
      {{s.name}}
      {{s.Temp}}

    </li>
    </ul>

过滤函数

$scope.filterByTempo = function(field,tempo) {
    return function(item) {
      if (item[field]<= tempo){
        return true;
      }
      return false;
    }
  }

已更新 Plunker(使用 Angular 自定义过滤器)

已更新Plunker(使用过滤功能)

而不是:

var x = document.getElementById("myNumber").value;

你应该做的:

$scope.filter = { value: 2 };

而不是:

document.getElementById("demo").innerHTML = x;

你应该做的(在HTML):

<input type="number" id="myNumber" ng-model="filter.value">

<p id="demo">{{ filter.value }}</p>

您不需要按钮或 condEqual 功能,Angular 双向数据绑定将实时更新所有内容。

最后一点,只需将 filter.value 作为参数传递给您的过滤器。

app.filter('tempo', function() {
    return function(items, field, value) {
        var filtered = [];
        angular.forEach(items, function(item) {
            if (item[field] <= value){
                filtered.push(item);
            }
        });
        return filtered;
    };
});

并且:

<li ng-repeat="s in sensordata | tempo:'Temp':filter.value">