"键未定义”;在AngularJS'的自定义筛选功能
"keys is not defined" in AngularJS's custom filter function
我在读一本Angular JS书中的例子时遇到了一些我不太清楚的地方。这与自定义过滤器和ng重复有关。这是的代码
<a ng-click="selectCategory()" class="btn btn-block btn-default btn-lg">
Home
</a>
<a ng-repeat="item in data.products | orderBy: 'category' | unique: 'category'" ng-click="selectCategory(item)" class="btn btn-block btn-default btn-lg">
{{item}}
</a>
以下代码是附加到html body标记的控制器。
angular.module("sportsStore").controller("sportsStoreCtrl", function ($scope) {
$scope.data = {
products: [
{
name: "Product #1",
description: "A product",
category: "Category #1",
price: 100
},
{
name: "Product #2",
description: "A product",
category: "Category #1",
price: 100
},
{
name: "Product #3",
description: "A product",
category: "Category #2",
price: 210
},
{
name: "Product #4",
description: "A product",
category: "Category #3",
price: 202
}
]
};
});
自定义过滤器的代码是
angular.module("customFilters", []).filter("unique", function () {
return function (data, propertyName) {
if (angular.isArray(data) && angular.isString(propertyName)) {
var results = [];
var keys = {};
for (var i = 0; i < data.length; i++) {
var val = data[i][propertyName];
if (angular.isUndefined(keys[val])) {
keys[val] = true;
results.push(val);
}
}
return results;
} else {
return data;
}
}
});
自定义过滤器应该做的基本上是在$scope.data.products.中创建一个类别列表
代码运行良好。我不明白的是"var-keys={};"在自定义过滤器函数中所扮演的角色。
拥有变量"keys"并将其属性值设置为true的意图是什么?
过滤器正在$scope.data和属性"category"提供的数据上执行。它检查唯一的类别,只显示类别的第一个实例。
当循环执行时,它读取每个数据索引上的"category"键的值。
keys对象充当跟踪器来跟踪已添加到结果数组中的值。
通过在keys对象上设置一个值,如果再次遇到该值,它将不满足if条件,也不会将其添加到结果数组中。
换句话说,它在Product#1上执行,将类别读取为category#1,将其添加到结果数组中,并创建一个键["category#1"]值true
接下来,在产品#2中,它提取"类别#1"的类别值。类别#1已经在关键对象上,因此它不会将产品#2添加到结果中
接下来,在Product#3中,它提取"category#2"的类别值,发现它不在keys对象中,所以它将"category#2"添加到结果中。
如果我没有弄错的话,结果显示应该是产品#1、#3和#4信息。
通过移除[val]=true键,将导致所有产品出现。
相关文章:
- 数据表自定义筛选
- 类别自动完成jQuery中的单词级自定义筛选器,而不是子字符串
- 想要将ng个repeat对象传递给自定义筛选函数
- 自定义筛选器不'我不使用django数据表视图创建的ajax.data.Json
- 在模型可用之前调用使用 app.filter 的自定义筛选器
- 使用select2 3.5.2中的initSelection进行自定义筛选
- "键未定义”;在AngularJS'的自定义筛选功能
- 如何通过在 Fabric JS 中传递颜色代码来创建自定义筛选器
- Angular.js 中字符串特定部分的自定义筛选器表达式
- 自定义筛选器排序方式
- AngularJs:错误:用于配对项目的自定义筛选器引发错误:“达到 10 次 $digest() 迭代.流产!
- 将带有属性的自定义筛选器传递到角度中的自定义指令
- 如何在自定义筛选器中添加多个参数
- 将重复项传递给自定义筛选器
- 将URL的一部分传递给AngularJS中的自定义筛选器
- Typescript+angularjs自定义筛选器未知提供程序:
- 按数组值进行角度自定义筛选
- 用于搜索JSON数据的自定义筛选器
- 为Kendo网格中的特定列自定义筛选消息
- $timeout或$apply在自定义筛选器中使用时导致无限循环