【问题标题】:filter list with multiple checkboxes in AngularjsAngularjs中带有多个复选框的过滤器列表
【发布时间】:2013-06-24 21:43:06
【问题描述】:

我想过滤带有多个类别复选框的 ng-repeat 项目列表。

我阅读了这个Filtering by multiple checkboxes in AngularJS 并观看了 Egghead 的视频,但我在一个简单的 for 循环中有一个错误,我不明白:

ReferenceError: i is not defined 

这是一个代码:http://plnkr.co/edit/p538ALfs00JTFQ6mKT9j

感谢您的帮助

【问题讨论】:

    标签: angularjs checkbox filter angularjs-ng-repeat


    【解决方案1】:

    如果你要使用严格模式 ('use strict';),你需要声明你的变量。您的checkboxFilter 使用了许多从未定义的变量(包括i)。您可以通过将 script.js:22-23 更改为:

          var i,j,k,filter_cat,filter_value,filter_name,matchingItems = [];
    

    在那之后你还有另外三个问题......

    1. 第 37 行,此代码正在查找名为 filter_cat 的属性:items[i].filter_cat,而您想要查找值为 filter_cat 的属性名称,所以这就是您想要的:@987654329 @。
    2. 您的 json 数据具有小写的字段名称,并且您的代码正在搜索大写字母(类型与类型)
    3. 您的 json 数据具有小写值,并且您的代码正在搜索大写字母(水果与水果)

    这是一个让您走上正轨的部分编辑。您仍然需要修改您的 json 或比较小写(我部分修改了您的 json):http://plnkr.co/edit/d7p4QthXJg4ao34ATWla?p=preview

    【讨论】:

    • 谢谢!我从 angular-seed 复制了'use strict';,现在我明白它在做什么了。你解决了我的问题。现在,我的代码仍然有一个错误:TypeError: Cannot read property 'length' of undefined。但是当我console.log(prefs) 时,返回数组。有什么想法吗?
    • 是的,你需要编写更多的防御性代码。基本上将if (prefs) {} 包裹在您的for (j = 0... 循环周围。这是因为竞争条件...您正在使用 ngResource 并在加载之前在过滤器中引用 $scope.users
    • 好的。我纠正了所有的错别字,以及你指出的错误。非常感谢。它在页面加载时工作(plunker 更新)。每次单击复选框或单击按钮时如何更改它?
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-12-07
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-07-21
    相关资源
    最近更新 更多