javascript - 在 AngularJS 中将 rangeSlider 与搜索过滤器结合起来

标签 javascript angularjs angularjs-filter angular-ngmodel

我正在使用这个rangeSlider以及包含 WebAPI 项目的表格列表的搜索过滤器。我的问题是,搜索过滤器与搜索表单中的范围 slider 不同步。为了更好地想象,我向您展示当前的代码片段:

//Person view:
//rangeSlider
<div class="form-group form-group-sm">
   <label class="col-sm-3 control-label">Age:</label>
   <div class="col-sm-8">
     <div range-slider min="0" max="100" model-min="demo.min" model-max="search.age" pin-handle="min" show-values="true" ng-model="search.age">
     </div>
   </div>
</div>
...
//table list with items
<tr ng-repeat="person in personslist | filter:search">
    <td>{{ person.id }}</td>
    <td>{{ person.fname }}</td>
    <td>{{ person.age }}</td>
</tr>
...

//PersonCtrl
$scope.demo = {
  max: 100,
  min: 0
};

我认为 rangeSlider 指令中的 ngModel 没有获取值 search.age。在属性 model-max 中,我还添加了 search.age。当我在搜索表单中查找最大数字 8 时,它会显示年龄为 8、18、38 等的人员。但结果一定是0-8。我该如何解决这个问题?我还尝试在属性 on-handle-up 中定义一个函数,但我不知道如何获取 filter: search 中的项目。

最佳答案

我认为问题在于您使用过滤器。这是基于文本的,因此您的结果将按年龄中包含字符“8”的结果进行过滤。

相反,创建一个自定义过滤器来执行您想要的操作。下面的过滤器将限制年龄范围内的结果:

App.filter('range', function() {
    return function(list, min, max) {
        max = parseInt(max);
        var result = [];
        angular.forEach(list, function(input) {
            if (input.age >= min && input.age <= max) result.push(input);
        });
        return result;
    };
});

然后,您可以使用 search.age 值作为 max 参数,使用 0 作为 min 参数,以返回零到年龄 slider 值之间的所有结果:

<tr ng-repeat="person in personslist | range:0:search.age">

通过修改范围 slider ,您可以使用 slider 中的最小和最大范围值。根据下面的评论,“$scope.search”对象无法保存范围值,因为它们也会被 filter 拾取,我使用了一个名为“$scope”的单独范围变量.范围”:

<div range-slider model-min="ranges.min_age" model-max="ranges.max_age" ...></div>

<tr ng-repeat="person in personslist | range:ranges.min_age:ranges.max_age | filter:search">

我的示例经过硬编码,可以处理年龄,因此如果您想按多个范围进行搜索,则必须对其进行调整。

这是一个示例:http://jsfiddle.net/g0woejpf/2/

我无法让 Angular slider 与 jsfiddle 很好地配合,所以我无耻地 ripped one off从其他地方来演示它是如何工作的,但应该应用相同的原则。

关于javascript - 在 AngularJS 中将 rangeSlider 与搜索过滤器结合起来,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30525801/

相关文章:

javascript - 循环和递归 : the difference in the number of repetitions

javascript - Angular.js 值未保存在文本框中的范围内

javascript - 当我们有多个过滤器时,AngularJS 过滤器对数据进行 "OR"操作

angularjs - Angular ng-repeat 按格式化日期过滤/搜索

javascript - 仅在需要时才在 DOM 中使用 jQuery 加载 HTML 元素

javascript - Ajax,防止点击多个请求

c# - 文件上传 - 返回 null

angularjs - ng-disabled 不适用于单选按钮和复选框

javascript - AngularJS - 显示以 '$' 作为第一个字符的属性

angularjs - 棱 Angular 分明。如何过滤 Controller 中的动态数组?