【问题标题】:Migrate custom AngularJS filter from 1.2.28 to 1.4.x将自定义 AngularJS 过滤器从 1.2.28 迁移到 1.4.x
【发布时间】:2015-07-17 22:48:53
【问题描述】:

我有一个复杂的 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'
  }]
}
}];

支持 Plunker 示例:

编辑:

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

【问题讨论】:

  • 从调试你的第二个 plunker 可以明显看出,他们在最新的 Angular 中引入了 DeepCompare。所以也许list_filter 的一些工作已经完成了
  • 不要过多地调试 Angular 我会重新实现 list_filter 使用将函数而不是表达式传递给 $filter docs.angularjs.org/api/ng/filter/filter
  • 看来问题可能与现在正在应用隐式 AND 条件但以前是隐式 OR 的事实有关,这在我的情况下是需要的。使用内置过滤器需要显式设置此逻辑的增强功能。

标签: javascript angularjs filter


【解决方案1】:

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

【讨论】:

    猜你喜欢
    • 2015-09-08
    • 2013-11-29
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多