如何设置自定义对象属性以在 Angular 类型提前中进行筛选

How to set custom object property to filter against in Angular typeahead?

本文关键字:类型 Angular 筛选 何设置 设置 属性 对象 自定义      更新时间:2023-09-26

我正在尝试实现一个通用的typeahead指令。它采用选项列表和配置对象作为属性。配置对象的属性之一是"标签" - 向用户显示什么以及如何过滤用户的查询。但是,我无法在我的过滤器表达式中使用此属性,如下所示:

 uib-typeahead="option as option[config.label] for option in options | filter:{ config[label] :$viewValue } 

当我尝试这样做时,我收到以下错误:

Syntax Error: Token '[' is unexpected, expecting [:] at column 26 of the expression [options | filter:{ config[label] :$viewValue }] starting at [[label] :$viewValue }].

请帮忙!

ngOptions想要接受一个对象作为过滤器。 使用下面的语句,您尝试创建并传递给它一个动态键控对象,该对象无法以内联方式完成当前设置,它是无效的 Javscript 语法:

... filter:{ config[label] :$viewValue }

解决此问题的一种方法是在控制器中构造对象,然后将其传递给过滤器,请注意,我按名称引用动态过滤器的值,而不是$viewValue

// controller
$scope.filterByObj[$scope.config['label']] = $scope.selectedFilter;
// template
... filter: filterByObj

我举了一个描述这个想法的例子:http://plnkr.co/edit/7gffq3mEtFqrfAP4shrj?p=preview