[英]Can we access user input value in customfilter.Trying to access user input number from controller or directly in customfilter
我是角度js的新手。这里我试图通过从currentTemp变量中减去用户输入(x)来根据温度过滤数据。但不确定我是否可以访问自定义过滤器中的用户输入值。我正在计划使用同样的事情在以后的日期。现在这可能就足够了。请使用custome文件管理器提供反馈(使用输入值并在自定义过滤器中减去它)。任何其他逻辑也将非常有用。
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>
(我在这里尝试做的主要是基于日期过滤数据,即基于用户输入,即如果用户输入特定值,例如,我应该能够从当前日期减去该值并显示从现在起3天后的所有数据。即用户输入3和今天的日期2015年2月19日..我将过滤最后三天的所有数据。)现在尝试使用温度将使用相同的逻辑日期以后的日期
使用模型绑定输入,然后您可以直接在自定义过滤器中传递该模型,如下所示
<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 (使用角度自定义过滤器)
更新的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">
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.