【问题标题】:Don't sort the Map when using ngFor使用 ngFor 时不要对 Map 进行排序
【发布时间】:2019-07-30 21:50:12
【问题描述】:

我正在使用 ngFor 来显示地图。为此,我使用了键值。它看起来像这样:

*ngFor="let upgrade of upgrades | keyvalue"

我现在的问题是,keyvalue 对我的地图进行排序。我不想要这个,也不知道如何停止排序。

我尝试使用sortOrder = (a): number => {return (a)}; 作为 compareFn;它有效,但我认为这不是正确的做法吗?

【问题讨论】:

  • 这可能是偏离轨道,但是,实际对信息进行排序有什么问题?通常这会使最终用户的视图更好:)

标签: angular ionic-framework ionic4


【解决方案1】:

由于您正在使用 Map,如果您不想对键进行排序 你可以使用

*ngFor="let key of upgrades.keys()"

 *ngFor="let entry of upgrades.entries()"

如果您仍然想使用键值管道,那么您的方式是正确的方式。虽然这有点令人困惑。 由于 compareFn 返回一个数字,您的 sortOrder 函数可能会理解为 null 或 NaN。我更喜欢(a,b)=>1 更清楚。不过没关系,排序还在进行中,可能会浪费一些 CPU 时间。

【讨论】:

  • 我确实在这里看到了这种尝试:link。但是,正如那里提到的,这是行不通的。
  • 惊讶地发现这不起作用,但很高兴知道。谢谢。
【解决方案2】:

是的,keyvalue 管道确实按键排序。我怀疑这是ngClassngStyle 的要求,因为源代码cmets 中提到了这一点。

您无法停止排序。我只是创建自己的管道。

@Pipe({name: 'entries', pure: true})
export class EntriesPipe implements PipeTransform {
     transform(value: May<any,any>) {
         return Array.from(value.entries());
     }
}

我把烟斗弄干净了,但这取决于你。 Map&lt;&gt; 类型如果是纯的,则很难使用。

【讨论】:

猜你喜欢
  • 2018-09-05
  • 1970-01-01
  • 1970-01-01
  • 2014-10-29
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多