将自定义AngularJS过滤器从1.2.28迁移到1.4.x

Migrate custom AngularJS filter from 1.2.28 to 1.4.x

本文关键字:迁移 AngularJS 过滤器 自定义      更新时间:2023-09-26

我有一个使用ng-repeat迭代的复杂JSON响应。结果集中只有相对较小的属性子集显示在屏幕上,因此对结果的过滤应该限制在用户实际可以看到的值,否则过滤行为会使最终用户感到困惑。

由于我希望过滤的属性之一是一个深度嵌套的数组,因此需要一个自定义过滤器,因为内置的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'
  }]
}
}];

支撑柱塞示例:

  • Plunker for version 1.2.28:http://plnkr.co/edit/KD1MmNMBEhO7X2v9yK4S?p=info
  • 版本的Plunker3: http://plnkr.co/edit/OmPOOwRWCHuPutUtWOcC?p=info

编辑:

这个问题似乎与v1.3.6中引入的更改直接相关

这个问题似乎与现在应用隐式AND条件有关,但以前是隐式OR条件,这是我所希望的。如果需要旧的行为,可以将旧版本作为单独的过滤器导入。