问题描述
我有一个复杂的JSON响应,它使用ng-repeat进行迭代。 屏幕上仅显示结果集中属性的相对较小的子集,因此对结果的过滤应限于用户实际可以看到的值,否则过滤行为会使最终用户感到困惑。
由于我希望过滤的属性之一是深度嵌套的数组,因此需要一个自定义过滤器,因为据我所知,内置的AngularJS filterFilter不会迭代数组元素。
我能够在AngularJS v1.2.28上使它工作一段时间,但是不幸的是,在迁移到v1.4.3时它似乎中断了。 但是,我还没有花时间来隔离此功能在发布节奏中的哪个位置。
我没有在迁移指南中找到任何有用的信息来表明发生了什么变化。 我所知道的是,在AngularJS的最新主要版本中,过滤器的实际/预期参数接收到不同的值,这导致失败。
ng-repeat过滤器表达式:
<li ng-repeat="user in users | list_filter:{establishment: {id: filterText, names: [{name: filterText}], locations: [{streetAddress1: filterText, streetAddress2: filterText, city: filterText, stateProvince: filterText, postalCode: filterText}]}}">
单个元素的示例数据结构:
data = [{
id: 234567,
name: 'John Doe',
establishment: {
id: 067915959,
locations: [{
id: '134B030365F5204EE05400212856E994',
type: 'postal',
streetAddress1: 'P O BOX 900',
city: 'Grover',
stateProvince: 'CA',
postalCode: '902340900',
isoCountryCode: 'US',
region: 'MONROE'
}, {
id: '999B030365F4204EE05400212856E991',
type: 'postal',
streetAddress1: '2590 Atlantic Ave',
city: 'Fredricks',
stateProvince: 'VA',
postalCode: '45487',
isoCountryCode: 'US',
region: 'MONROE'
}],
names: [{
name: 'Grover Central School Dst',
type: 'PRIMARY'
}, {
name: 'Grover Central School Dst',
type: 'MARKETING'
}, {
name: 'Grover CENTRAL SCHOOL DISTRICT',
type: 'LEGAL'
}]
}
}];
支持柱塞示例:
- 1.2.28版的Plunker: ://plnkr.co/edit/KD1MmNMBEhO7X2v9yK4S?p = info
- 1.4.3版的Plunker: ://plnkr.co/edit/OmPOOwRWCHuPutUtWOcC?p = info
编辑:
该问题似乎与v1.3.6中引入的更改直接相关。
1楼
似乎该问题与以下事实有关:现在正在应用隐式AND条件,但以前是隐式OR,这是我所需要的。 如果需要旧行为,可以将旧版本作为单独的过滤器导入。