gpt4 book ai didi

AngularJS在范围之间过滤

转载 作者:行者123 更新时间:2023-12-04 14:12:57 26 4
gpt4 key购买 nike

我设置了一个范围从 0 到 2 小时的范围 slider ,时间以分钟为单位计算,然后转换为 hh:mm,如下所示:10 分钟、20 分钟、1 小时、20 分钟、2 小时。

但现在我试图过滤 ng-repeat 中的一堆项目使用范围 slider 指定的范围,我很难让它工作。

这是我所做的http://cdpn.io/LDusa

我正在使用 http://danielcrisp.github.io/angular-rangeslider/demo/对于范围 slider 。

这是代码:

var app = angular.module('myApp', ['ui-rangeSlider']);
app.controller('myCtrl', function ($scope) {
$scope.sliderConfig = {
min: 0,
max: 120,
step: 10,
userMin: 0,
userMax: 30
};

$scope.times = [
{"time": "20"},
{"time": "50"},
{"time": "30"},
{"time": "10"},
{"time": "85"},
{"time": "75"},
{"time": "95"},
{"time": "100"},
{"time": "80"},
{"time": "200"},
{"time": "260"},
{"time": "120"},
{"time": "62"},
{"time": "68"},
{"time": "5"},
{"time": "116"}
];
});

app.filter('customFilter', function () {
return function (value) {
var h = parseInt(value / 60);
var m = parseInt(value % 60);

var hStr = (h > 0) ? h + 'hr' : '';
var mStr = (m > 0) ? m + 'min' : '';
var glue = (hStr && mStr) ? ' ' : '';

return hStr + glue + mStr;
};
});

app.filter('range', function() {
return function(input, min, max) {
min = parseInt(min);
max = parseInt(max);
for (var i=min; i<=max; i++)
input.push(i);
return input;
};
});

JADE(如果您更喜欢 HTML,可以使用 http://html2jade.org/ 将其转换回 html):
div(ng-app="myApp")
div(ng-controller='myCtrl')
div(range-slider='', pin-handle='min', attach-handle-values='', prevent-equal-min-max='', step='{{sliderConfig.step}}', min='sliderConfig.min', max='sliderConfig.max', model-min='sliderConfig.userMin', model-max='sliderConfig.userMax', filter='customFilter')


div(range-slider, prevent-equal-min-max='', attach-handle-values='', min='sliderConfig.min', max='sliderConfig.max', model-min='sliderConfig.userMin', model-max='sliderConfig.userMax', filter='customFilter')

div(ng-repeat="time in times | range:sliderConfig.userMin:sliderConfig.userMax")
| {{ item.time | customFilter }}

我怎样才能让它工作,所以它只会在 time 时显示项目是否在范围 slider 中指定的范围内?

最佳答案

将 sliderConfig 传递到过滤器中以查找范围 slider 上设置的当前最小值和最大值。确保您的对象在数组中。

    <div range-slider="range-slider" 
min="sliderConfig.min"
max="sliderConfig.max"
model-min="sliderConfig.userMin"
model-max="sliderConfig.userMax">
</div>
...
// Pass the slider config into the filter
<div ng-repeat="time in times | rangeFilter:sliderConfig">
{{ time.time | customFilter}}
</div>
...
$scope.times = [
{time: '20'},
{time: '50'},
...
];

rangeFilter 具有第二个参数“rangeInfo”,我们可以从中获取 2 个值。
app.filter('rangeFilter', function() {
return function( items, rangeInfo ) {
var filtered = [];
var min = parseInt(rangeInfo.userMin);
var max = parseInt(rangeInfo.userMax);
// If time is with the range
angular.forEach(items, function(item) {
if( item.time >= min && item.time <= max ) {
filtered.push(item);
}
});
return filtered;
};
});

希望能帮助到你。

关于AngularJS在范围之间过滤,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23728666/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com